簡體   English   中英

將十六進制數字轉換為帶符號的short

[英]converting hex number to signed short

我正在嘗試將包含十六進制值的字符串轉換為在C#中等效的帶符號的縮寫

例如:

-1的等效十六進制數為0xFFFF(兩個字節)

我想做逆,即我想將0xFFFF轉換為-1

我正在使用

 string x = "FF";
 short y = Convert.ToInt16(x,16);

但輸出y是255而不是-1,我需要等效的有符號數

誰能幫我? 謝謝

您正在尋找轉換帶符號字節的字符串表示形式,而不是簡短的形式。

您應該改用Convert.ToSByte(string)

一個簡單的單元測試來演示

[Test]
public void MyTest()
{
    short myValue = Convert.ToSByte("FF", 16);
    Assert.AreEqual(-1, myValue);
}

當輸入為“ 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

有關在十六進制字符串和數值之間進行轉換的完整詳細信息,請參見http://msdn.microsoft.com/zh-cn/library/bb311038.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM