Преобразовать двоичный код в знаковое int/decimal

Я пытаюсь преобразовать шестнадцатеричные данные в подписанные int/decimal и не могу понять, что я делаю неправильно.

я нуждаюсь FE превратиться в -2,

я использую Convert.ToInt32(fields[10], 16) но я получаю 254 вместо -2,

Будем очень благодарны любой помощи.

3 ответа

Решение

int имеет ширину 32 бита, поэтому 0xFE действительно интерпретируется как 0x000000FE для целей Convert.ToInt32(string, int), который равен 254 в пространстве int,

Поскольку вы хотите работать с диапазоном значений со знаком байтов, используйте Convert.ToSByte(string, int) вместо (byte по умолчанию не подписан, поэтому вам нужно sbyte введите вместо).

Convert.ToSByte("FE",16)

Интерпретировать значение как подписанный байт:

sbyte value = Convert.ToSByte("FE", 16); //-2

Ну границы Int32 от -2 147 483 648 до 2 147 483 647. Так FE соответствует 254.

Если вы хотите обернуть более 128, наиболее элегантное решение - использовать подписанный байт (sbyte):

csharp> Convert.ToSByte("FE",16);   
-2
Другие вопросы по тегам