我想爲一個字符串,包含十六進制值成等值的C#轉換十六進制數符號短
短簽署例如轉換:
-1相當於十六進制數爲0xFFFF(在兩個字節)
我想要做的倒數,即我要到0xFFFF轉換爲-1
我使用
string x = "FF";
short y = Convert.ToInt16(x,16);
但輸出y是255而不是-1,我需要相應的有符號數
任何人都可以幫助我嗎? 謝謝
我想爲一個字符串,包含十六進制值成等值的C#轉換十六進制數符號短
短簽署例如轉換:
-1相當於十六進制數爲0xFFFF(在兩個字節)
我想要做的倒數,即我要到0xFFFF轉換爲-1
我使用
string x = "FF";
short y = Convert.ToInt16(x,16);
但輸出y是255而不是-1,我需要相應的有符號數
任何人都可以幫助我嗎? 謝謝
當你的輸入是「FF」時,你有一個字節的十六進制字符串表示形式。
如果您嘗試將其分配給一個較短的(兩個字節),則不會考慮將最後一位應用於轉換後的數字,因此您會得到255值。
相反,「FFFF」的字符串表示代表最後一位設置爲1的兩個字節,因此如果分配給像Int16這樣的帶符號類型,則結果爲負,而如果分配給像ushort這樣的無符號類型,結果爲65535-
string number = "0xFFFF";
short n = Convert.ToInt16(number, 16);
ushort u = Convert.ToUInt16(number, 16);
Console.WriteLine(n);
Console.WriteLine(u);
number = "0xFF";
byte b = Convert.ToByte(number, 16);
short x = Convert.ToInt16(number, 16);
ushort z = Convert.ToUInt16(number, 16);
Console.WriteLine(n);
Console.WriteLine(x);
Console.WriteLine(z);
輸出:
-1
65535
-1
255
255
您正在尋找轉換籤名字節的字符串表示形式,而不是簡短。
您應該改用Convert.ToSByte(string)。
一個簡單的單元測試來證明
[Test]
public void MyTest()
{
short myValue = Convert.ToSByte("FF", 16);
Assert.AreEqual(-1, myValue);
}
哦,我剛剛意識到,謝謝 – Rehab11
請參閱http://msdn.microsoft.com/en-us/library/bb311038.aspx的全部細節上的十六進制字符串和數值之間的轉換。
我不理解爲什麼那個數的值變爲1。我知道byte
值將是溢出。
byte number = 255;
number += 2;
Console.WriteLine(number);
輸出是:1
如果你有一個新的問題,請問點擊[Ask Question](https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/19052666) – xskxzr
你能顯示輸出255的代碼? – Steve
我剛剛在linqpad中運行Convert.ToInt16(「0xFFFF」,16),並得到-1 –
@PaulMcCowat相同,這就是要求輸出代碼 – Steve