2017-09-13 136 views
0

我想將十六進制數據轉換爲有符號整數/十進制,並不能找出我做錯了什麼。我需要FE變爲-2轉換二進制爲有符號整數/十進制

我使用的是Convert.ToInt32(fields[10], 16),但我得到254而不是-2

任何援助將不勝感激。

+1

你能否解釋一下?你怎麼知道是Y你需要得到'-2'而不是'254'? –

+0

我正在與之合作的那個人想要看到一個簽名的值,不知道爲什麼,但這就是要求。雖然這是可能的。此鏈接在JavaScript中執行。 http://www.free-test-online.com/binary/signed_converter.html – StarScr3am77

+0

這不是一個有符號整數的小數 - 如果你想以這種方式讀取它,它是一個有符號的字節。 –

回答

4

int是32個位寬,所以0xFE的真的被解釋爲0x000000FE用於Convert.ToInt32(string, int)目的,這在int空間等於254。由於你想使用帶符號的字節範圍值,所以使用Convert.ToSByte(string, int)代替(默認情況下,byte未簽名,所以你需要sbyte類型)。

Convert.ToSByte("FE",16)

+0

完美!非常感謝!!! – StarScr3am77

2

解釋值作爲一個符號字節:

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

Int32的邊界是-2 147 483 648到2 147 483 647所以FE比賽254

如果你想在128左右做一次總結,最優雅的解決方案是proably到使用符號字節sbyte):爲什麼要打開`FE`成`-2`,而不是`254`

csharp> Convert.ToSByte("FE",16); 
-2 
相關問題