Эффективная шестнадцатеричная манипуляция - PullRequest
1 голос
/ 03 сентября 2010

У меня есть байтовый массив, представленный шестнадцатеричными значениями, это временные интервалы.Данные могут быть преобразованы в целочисленные значения и умножены на константу, чтобы получить время.Декодирование данных будет сохранено в файл в виде последовательности шестнадцатеричных строк.Какой эффективный способ манипулирования шестнадцатеричными значениями?


Я рассматривал проблемы с производительностью при работе с форматами данных, поскольку мне приходилось работать с несколькими форматами на разных этапах (вычисления, отображение данных)., так далее.).В большинстве примеров показано преобразование байта [] в шестнадцатеричную строку ("1A 3C D4") и наоборот, но я искал альтернативу, которая заключается в преобразовании в Int16 и использовании массива char [].

Ответы [ 2 ]

5 голосов
/ 03 сентября 2010

У вас нет байтового массива, представляющего шестнадцатеричные значения. У вас есть байтовый массив, представляющий числа . База, в которой вы представляете число, имеет значение только тогда, когда вы представляете его .

Другими словами: если вы думаете, что ваш байтовый массив представляет собой десятичное целое число вместо этого, как вы думаете, что он будет другим? Отличается ли мой рост, если я представляю его в футах и ​​дюймах вместо метров?

Теперь, если вы пытаетесь представить 16-битные числа, я бы предположил, что использование байтового массива - плохая идея. Вместо этого используйте ushort[] или short[], так как эти являются 16-битными значениями. Если у вас возникли проблемы с переносом данных в такой массив, пожалуйста, сообщите подробности ... аналогично, если у вас есть другие проблемы с манипуляциями. Просто имейте в виду, что пока вы не записываете данные как текст , на самом деле не существует такого понятия, в какой базе оно находится, насколько это касается компьютера.

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

0 голосов
/ 03 сентября 2010

С MSDN :

Шестнадцатеричный ("X") спецификатор формата преобразует число в строку шестнадцатеричные цифры. Дело о спецификатор формата указывает, следует ли использовать прописные или строчные буквы для шестнадцатеричных цифр, которые больше 9. Например, используйте «X» производить "ABCDEF", а "х" произвести "abcdef". Этот формат поддерживается только для целочисленных типов.

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

byte x = 60;
string hex = String.Format("0x{0:X4}", x);
Console.WriteLine(hex); // prints "0x003C"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...