Auditportal.ru

Аудит Портал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как конвертировать между kb и mb, gb, tb и наоборот?

Сколько килобайт в мегабайте?

Где находится память для хранения информации на вашем компьютере? Вас всегда смущают различные измерения KB (килобайты), MB (мегабайты) и GB (гигабайты)?

В этой статье мы попытаемся выяснить, что такое килобайт, мегабайт и гигабайт, а также что больше KB, MB или GB.

Концепция бит

Для бита существует только два возможных значения — 1. Бит — это разряд двоичного кода. В компьютерной технике различные комбинации 1 и 0 являются основой для хранения информации и выполнения команд.

килобайты

Блок цифровой информации в вычислительной технике называется байтом. Это упорядоченный набор битов. Исторически байт — это количество битов, используемых для кодирования одного символа текста на компьютере. Размер байта обычно зависит от аппаратуры, но сейчас принято считать, что байт эквивалентен 8 битам и всегда кратен 2. Количество битов для хранения информации всегда кратно 2. (Латынь: octuor). Таким образом, байт — это наименьший фрагмент данных, который может быть обработан компьютером любого типа.

Кто больше, КБ или МБ?

Компьютерный мир — это биты и байты. Следующий термин, который нам необходимо понять, — килобайт (KB). В двоичной системе счисления килобайт — это 1024 байта, которые обозначаются цифрой 2. Килобайт часто определяют как 1000 байт в десятичной системе счисления. В этот момент люди начинают путаться в том, сколько памяти существует. Десятичные килобайты всегда меньше двоичных килобайтов, которые, в свою очередь, являются более точными.

Как и килобайты, мегабайты имеют два значения. При расчете в двоичной системе мегабайт равен 1048576 байтам или 2 в 20-й степени. В десятичной системе мегабайт равен 1000000 байт. В десятичной системе мегабайт обозначается как мегабит.

Пользователи часто спрашивают, что больше KB или MB? Путаницу усугубляет то, что сами производители компьютерного оборудования при описании своей продукции используют понятия килобайт или мегабайт как в десятичной, так и в двоичной форме. На этикетках жестких дисков, например, объем часто указывается в десятичной системе счисления. Из-за этого жесткий диск емкостью 160 Гб на самом деле имеет 163840 мегабайт памяти.

Ниже приведена таблица соответствий в двоичной системе.

1 бит = 1 или 0
1 ниббл = 4 бит
1 байт = 8 бит
1 КБ (один килобайт) = 1024 байт
1 МБ (один мегабайт) = 1024 КБ = 1048576 байт

В следующем разделе мы рассмотрим значения терминов килобит и мегабит. Скорость передачи данных относится к скорости локальной вычислительной сети или Интернета. В таблице ниже мы приводим ответ на вопрос, что больше математически.

Читайте так же:
Как найти в Excel второе по частоте / частое число или текст?

1 кбит/с = 1000 бит в секунду
1 Мбит/с = 1000000 бит в секунду

В статье показано, что МБ всегда больше КБ, независимо от того, используем ли мы двоичную или десятичную арифметику.

Существует также разница в написании этих терминов. Аббревиатуры для обозначения бита не существует. Поэтому термин Гбит используется для 1000000 бит, а 1 ГБ — для 1000000 байт.

Килобайт эквивалентен 1 килобиту, а килобит — Кбит/с.

Предоставляет ли .NET простой способ конвертировать байты в КБ, МБ, ГБ и т. Д.?

Просто интересно, предлагает ли .NET чистый способ сделать это:

Вот относительно краткий способ сделать это:

И вот исходная реализация, которую я предложил, которая может быть немного медленнее, но немного легче следовать:

Следует иметь в виду одну вещь: в системе СИ, «килограмм» обычно использует строчную букву k, в то время как все более крупные единицы используют заглавную букву. Windows использует КБ, МБ, ГБ, поэтому я использовал КБ выше, но вместо этого вы можете рассмотреть КБ.

  • Спрашивающий ищет только 1 десятичный знак точности. Не могли бы вы привести пример ввода, который дает неправильный вывод?
  • 2 В обоих примерах теперь используется деление с плавающей запятой, поэтому ошибок округления должно быть гораздо меньше.
  • 1 Очень аккуратная реализация. Обратите внимание, что если вы передадите значение 0 этой функции, она вызовет исключение IndexOutOfRangeException. Я решил добавить if (value == 0) < return '0'; >проверьте внутри функции.
  • 1 Можете ли вы представить случай, когда размер файла System.TimeSpan за байты!

С его помощью вы можете конвертировать и форматировать документы.

Он также может выполнять представление строк и синтаксический анализ.

  • 6 Прост в использовании и понимании, работает с .Net 4.0 и выше.
  • 37 Это должно быть включено как часть .NET framework
  • Единственная проблема, которую я вижу, заключается в том, что методы преобразования работают только от небайта к байту, но не наоборот.
  • @SuperJMN что вы имеете в виду небайтовое? Как биты? Существует метод .FromBits, который вы можете использовать.
  • 1 Если ваши исходные данные представляют собой нечто иное, чем «байты», и вам нужно иметь возможность конвертировать во что угодно . это библиотека, которую вы должны использовать.

Все остальные публикуют метод расширения, который они обычно используют, поэтому я решил опубликовать свой:

EDIT : добавлены варианты длинный / длинный. и исправлена опечатка в копипасте.

  • Имейте в виду, что строчная буква b обычно обозначает биты, а не байты. 🙂 en.wikipedia.org/wiki/Data-rate_units#Kilobit_per_second
  • Скорее, чем > 1 Я бы, наверное, сделал >= 1

Я бы решил эту проблему с помощью методов Extension и Mathematics. Pow, и Enums :

И использовать как :

  • 3 Шикарное решение!
  • 1 Я воспользовался вашей идеей, чтобы создать такой, который автоматически определяет единицы измерения. +1
  • 2 Это очень элегантное решение, которое намного чище и соответствует утвержденному решению. Однако, строго говоря, на основе значений перечисления он должен быть основан на степени 1000, т.е. не на коде 1024 (en.wikipedia.org/wiki/Terabyte) . общедоступная статическая строка ToSize (это длинное значение, единица измерения) => $ " <значение / Math.Pow (1000, (длинная) единица): F2>";

В краткой версии ответа, получившего наибольшее количество голосов, есть проблемы со значениями TB.

Значения tb также обрабатываются, но без циклов, и добавлена небольшая проверка на ошибки для отрицательных значений. Вот мое решение:

  • 1 Выявленная проблема больших значений не должна более присутствовать в принятом ответе.

Нет. В основном потому, что это довольно узкая потребность и существует слишком много возможных вариантов. (Это «КБ», «КБ» или «Ко»? Мегабайт 1024 * 1024 байта или 1024 * 1000 байтов? — да, в некоторых местах это используется!)

  • 1 +1 — согласно Википедии, kb => 1000 байт, а KiB => 1024 байта.

Этот вариант легче расширить, чем ваш, но он не встроен в саму библиотеку.

Прекрасный и лаконичный ответ @ Servy. Я думаю, что это может быть еще проще?

Я знаю, что это старая тема, но, возможно, кто-то будет искать решение. Вот то, что я использую, и самый простой способ.

Получение размера файла (например, использование)

  • Это самое элегантное решение.
  • @SergeyKovalev спасибо 🙂 Я пользуюсь им постоянно. Меньшее потребление процессора и простота использования

Вот один из способов сделать это (число 1073741824.0 из 1024 * 1024 * 1024, также известное как Гб)

Решение NeverHopeless основано на следующем:

Иногда появляются ненужные комментарии, но я их оставляю, чтобы не повторить ту же ошибку при следующем посещении.

Но вы можете применить его на практике таким образом:

См. также Как правильно конвертировать размер файла в байтах в мегабайты и гигабайты?

Я объединил некоторые ответы здесь в два метода, которые хорошо работают. Второй метод ниже преобразует строку байтов (например, 1.5, 1GB) обратно в байты (например, 1621350140) как значение типа long. Надеюсь, это будет полезно тем, кто ищет решение для преобразования байтов в строки и наоборот.

  • Можно узнать, почему вы используете float.parse дважды?

Например, имя как

В результате на выходе получается

Я выбрал решение JerKimballs, и оно мне понравилось. Однако я хотел бы добавить, что это спорная тема в целом. В ходе своего исследования (по другим причинам) я получил следующую информацию.

Когда нормальные люди (я слышал, что такие люди есть) говорят о гигабайтах, они имеют в виду метрическую систему, где 1000 в степени 3 от исходного количества байт == количество гигабайт. Но, конечно, существуют стандарты IEC/JEDEC, которые хорошо обобщены в Википедии, где вместо 1000 в степени x у вас 1024. Что для физических устройств хранения (и, возможно, логически для Amazon и других) означает увеличение разницы между метрическими и IEC. Так, например, 1 ТБ == 1 терабайт 1000 в 4 степени, но IEC официально называет то же число 1 ТБ, а терабайт — 1024 в 4 степени. Но, к сожалению, метрики являются нормой в нетехнических приложениях (например, для широкой публики), и в моем собственном приложении для внутреннего использования я теперь объясняю разницу в документации. Но для отображения я даже не предлагаю ничего, кроме метрик. Внутри, хотя это не имеет никакого отношения к моему приложению, я просто храню байты и выполняю вычисления для отображения.

В качестве побочного примечания, довольно тускло, что. В любых внутренних библиотеках Net Framework (а я часто ошибаюсь, благодаря сильным мира сего) об этом ничего нет. Библиотеки с открытым исходным кодом должны стать NuGettable в какой-то момент, но я признаю, что это немного хлопотно. С другой стороны, System. IO. А также DriveInfo и другие имеют только байты (пока).

А как насчет рецидивов?

Затем вы можете позвонить:

При использовании логарифма предпочтительнее использовать рекурсию.

Следующая функция имеет 3 аргумента: ввод, ограничение размера вывода, то есть третий аргумент.

Давайте разделим 12 ГБ оперативной памяти на несколько блоков:

Я использую ее для Windows (бинарные префиксы):

Я включил это (практически без изменений) в конвертер UWP DataBinding для своего проекта и подумал, что это может быть полезно и для других.

Локальный ресурс должен быть добавлен к UserControl или XAML-странице:

Ссылка в шаблоне ссылки данных или экземпляре ссылки данных

И здравствуйте. Происходит волшебство.

( DISCLAIMER: Я написал все, что написано в этой ссылке!)

Вот мой ответ @drzaus. Были внесены изменения, чтобы правильно управлять единицами вблизи границ и использовать ошибки округления в наших интересах. Он также может обрабатывать отрицательные значения.

Запустите эту программу на C# в LinqPad :

Мне это понадобилось недавно, нужно было преобразовать байты в число в long.

Преобразование КБ в МБ, ГБ, ТБ динамически

Возвращает размер в ГБ, МБ, КБ или ТБ. Введите значение в КБ. Например, результат для 1245 должен быть 1,21 МБ, но я получаю 1,00 МБ.

Вы выполняете деление целых чисел. Поэтому результат деления также является целым числом. При этом дробная часть усекается.

Замените деление на деление с плавающей запятой: -.

Ваше сравнение также неверно. Вам следует провести сравнение с 1 .

В идеале я бы изменил ваше сравнение на: —

Правильной стратегией является сравнение сначала с более высокой единицей, а затем переход к более низкой.

  • 2 @pedja: Используйте else if вместо просто if за m , g , и t , поскольку даже небольшой файл может иметь размер 0,00000000001 ТБ (что больше нуля).
  • 1 @GregHewgill .. Ах! не заметил этого.
  • 1 @pedja .. Йо должен провести сравнение с 1 , и вы делаете это с 0 . Измените все если на k > 1 , g > 1 , .
  • 1 @pedja .. Проверьте отредактированный пост. Вам нужно изменить свой if сравнение немного.
  • 1 Что ж, есть много возможных способов реализовать желаемую функцию. Похоже, вы наконец пришли к реализации, которая работает для вас.

Модифицированная версия. Форматирует только один раз. Включает «Байты».

  • С 2020 года следует начать рассматривать PB, петабайт, петабайт EB, экзабайт, экзабайт ZB, зеттабайт, зеттабайт YB, йоттабайт, йоттабайт, йоттабайты

Мне нравится:

  • небезопасная функция! Crashlytics сообщает: Fatal Exception: java.lang.ArrayIndexOutOfBoundsException length=5; index=319302040
  • Что вы имеете в виду под словом «небезопасно»? Эта функция безопасна для разумных чисел и работает так, как предполагалось в вопросе (от B до TiB). Если вам нужны дополнительные размеры, вы можете добавить к массиву «PiB» и «EiB» для измерения пебибайтов и эксбибайт до 9 223 372 036 854 775 807 байт. Для больших чисел функция нуждается в переработке. В любом случае, как вы предлагаете исправить это, чтобы оно было «безопаснее» (что бы это ни значило)?

Проблема в том, что вы используете все деление. Измените свой код на :

В оригинальном коде double m = size/1024 делил бы размер целого числа на 1024, усекал результат до целого числа и только потом преобразовывал его в двойное число. Поэтому дробная часть была потеряна.

Выполняется деление целых чисел,

То есть, 31/15 дает 2, а не 2.

Просто добавьте число с буквой D или d, обозначив его как двойное, и все будет хорошо

Это непросто сделать правильно. Рохит Джайн упомянул целочисленную операцию. Также может возникнуть проблема с округлением, так как всегда округление в меньшую сторону может быть нежелательным. Я бы посоветовал использовать доступное решение, например, в библиотеке triava.

С помощью различных опций вывода он может форматировать числа в трех различных системах (SI, IEC, JEDEC). Ниже приведены примеры тестирования модулей Triava:

Вывод точных значений в килограммах, мегаваттах (здесь W = ватт)

Настройте вывод с помощью DecimalFormat:

При вычислении значений килограммов или мегаэлементов компоненты можно разложить на:

Чтобы лучше понять — https://www.techspot.com/news/68482-quickly-convert-between-storage-size-units-kb-mb.html

Просто добавьте дополнительный блок файла (если он отсутствует), и вы увидите размер блока до этого блока (если ваш файл имеет такую ​​большую длину)

  • 1 Очень хороший ответ! Спасибо Вишваджит
  • У меня проблема: 2362232012 это число в байтах равно 2.362232012 гигабайт, но при передаче числа байтов я получаю сообщение об ошибке, в котором указано, что целое число слишком велико ?? есть идеи?
  • 1 @ Inside4ndroid, измените тип данных вашего количества байтов на "длинный" тип данных. Так что ошибки не выдаст. Я редактирую свой код и меняю параметр метода с двойного на длинный.
  • Единицы измерения должны быть KiB, MiB и т. Д. До EiB, поскольку с длинным вы не можете измерить более 8 эксбибайт (-1 байт).

(вы можете определить некоторые константы вместо того, чтобы каждый раз рассчитывать POW):

Ответ bickster работает нормально, но проблема в том, что он возвращает результаты типа 45,00 байт и 12,00 КБ . Всякий раз, когда последняя десятичная цифра — ноль, я думаю, что ее следует удалить. Результат — 45 байт и 12 КБ (обратите внимание, что байт был заменен на Б). Это просто для последовательности, так как у нас есть KB, MB и т. д. и т. п., а не килобайты, мегабайты и т. Д. ).

Приведенный выше метод просто проверяет, есть ли в значении нули как десятичные числа.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector