Я хочу преобразовать число от 0 до 4096 (12 бит) в его трехсимвольное шестнадцатеричное строковое представление на C#.
Пример:
2748 to "ABC"





пытаться
2748.ToString("X")
Обратите внимание: если ваше целое число меньше или равно 255, вы не получите из него 3 символа.
Примечание. Предполагается, что вы используете собственное 12-битное представление. Если вы просто используете int / uint, то решение Muxa будет лучшим.
Каждые четыре бита соответствуют шестнадцатеричной цифре.
Поэтому просто сопоставьте первые четыре цифры с буквой, затем введите >> 4 и повторите.
2748.ToString ("X") возвращает "ABC", а не "0ABC"
Решение easy C может быть адаптировано:
char hexCharacters[17] = "0123456789ABCDEF";
void toHex(char * outputString, long input)
{
outputString[0] = hexCharacters[(input >> 8) & 0x0F];
outputString[1] = hexCharacters[(input >> 4) & 0x0F];
outputString[2] = hexCharacters[input & 0x0F];
}
Вы также можете сделать это в цикле, но это довольно просто, и цикл имеет довольно высокие накладные расходы только для трех преобразований.
Однако я ожидаю, что в C# есть какая-то библиотечная функция для такого рода вещей. Вы даже можете использовать sprintf в C, и я уверен, что C# имеет аналог этой функции.
-Адам
Извините, это конкретный вопрос для C#, в любом случае спасибо.
Что ж, дело в том, что Джастин Таннер отлично показал алгоритм.
Если вам нужно ровно 3 символа и вы уверены, что число находится в допустимом диапазоне, используйте:
i.ToString("X3")
Если вы не уверены, что число находится в диапазоне, это даст вам более 3 цифр. Вы можете сделать что-то вроде:
(i % 0x1000).ToString("X3")
Используйте строчные буквы «x3», если вам нужны строчные буквы.
% - довольно дорогая операция. (i & 0x0FFF) .ToString ("X3") функционально аналогичен и намного быстрее (хотя я надеюсь, что компилятор в любом случае выдаст тот же код)
Это проблема кода или присвоение ИЛИ вы просто пытаетесь преодолеть это препятствие? Для последнего String.Format с некоторыми магическими заклинаниями выполняет свою работу.