Преобразуйте каждое целое число в целочисленной строке в шестнадцатеричный формат с префиксом 0x - PullRequest
1 голос
/ 12 июля 2020

Я пытаюсь преобразовать 2017 год в массив байтов.

byte[] bytes = new byte[]{0x02, 0x00, 0x01, 0x07}

Какие доступны c# функции, которые могут помочь мне сделать что-то вроде:

BitLibrary.GetBytes - это просто используется в качестве примера, я не уверен, что мне доступно / В каком формате находится вышеуказанное преобразование.

bytes[] bytes = BitLibrary.GetBytes(2017) 

Сначала я попытался использовать BitConverter.GetBytes (2017), но он вернул

{byte[4]}
    [0]: 225
    [1]: 7
    [2]: 0
    [3]: 0

Когда я искал десятичные в шестнадцатеричные преобразователи онлайн, 2017 вернул 7E1.

ОБНОВЛЕНИЕ - я не уверен, как называется этот формат, но из моих требований я учитывая следующее -

2017

byte[] bytes = new byte[]{0x02, 0x00, 0x01, 0x07}

2021

byte[] bytes = new byte[]{0x02, 0x00, 0x02, 0x01}

1 Ответ

2 голосов
/ 12 июля 2020

примечание: этот ответ отражает исходное название и информацию, предоставленную OP в вопросе:

Преобразование целого числа в формат массива байтов с шестнадцатеричным кодированием с префиксом 0x

Сам по себе этот ответ не отражает представление числа с прямым порядком байтов.

Хорошо,

Итак,

input: в результате 2017 получается массив байтов с отдельными цифрами; что-то вроде:

public static byte[] Convert(uint input)
{
    return input.ToString().Select(c => (byte) (c - '0')).ToArray();
}

как для использования:

public static void Main()
{
    foreach(var b in Convert(2017))
    {
       Console.WriteLine("0x" + b.ToString("X2"));  
    }
}
    
public static byte[] Convert(int input)
{
    return input.ToString().Select(c => (byte) (c - '0')).ToArray();
}

Вывод:

0x02
0x00
0x01
0x07
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...