Преобразовать двоичный код в знаковое 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