Как преобразовать 12-битное целое число в шестнадцатеричную строку в C#?

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

Пример:

2748 to "ABC"

Это проблема кода или присвоение ИЛИ вы просто пытаетесь преодолеть это препятствие? Для последнего String.Format с некоторыми магическими заклинаниями выполняет свою работу.

Gishu 27.09.2008 06:53
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
3 108
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

пытаться

2748.ToString("X")

Обратите внимание: если ваше целое число меньше или равно 255, вы не получите из него 3 символа.

Blair Conrad 27.09.2008 07:02

Примечание. Предполагается, что вы используете собственное 12-битное представление. Если вы просто используете int / uint, то решение Muxa будет лучшим.

Каждые четыре бита соответствуют шестнадцатеричной цифре.

Поэтому просто сопоставьте первые четыре цифры с буквой, затем введите >> 4 и повторите.

2748.ToString ("X") возвращает "ABC", а не "0ABC"

Justin Tanner 27.09.2008 07:04

Решение 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#, в любом случае спасибо.

Justin Tanner 27.09.2008 07:01

Что ж, дело в том, что Джастин Таннер отлично показал алгоритм.

TraumaPony 27.09.2008 07:03

Если вам нужно ровно 3 символа и вы уверены, что число находится в допустимом диапазоне, используйте:

i.ToString("X3")

Если вы не уверены, что число находится в диапазоне, это даст вам более 3 цифр. Вы можете сделать что-то вроде:

(i % 0x1000).ToString("X3")

Используйте строчные буквы «x3», если вам нужны строчные буквы.

% - довольно дорогая операция. (i & 0x0FFF) .ToString ("X3") функционально аналогичен и намного быстрее (хотя я надеюсь, что компилятор в любом случае выдаст тот же код)

Adam Davis 27.09.2008 18:44

Другие вопросы по теме