如何将一个字节转换为两个';它的补语形式';s的整数值?C#
给定一个2的补码形式的字节,我试图将该字节转换为十进制表示形式。例如,如何将一个字节转换为两个';它的补语形式';s的整数值?C#,c#,C#,给定一个2的补码形式的字节,我试图将该字节转换为十进制表示形式。例如,字节10000000我需要转换为-128,而字节
字节
10000000
我需要转换为-128
,而字节
<01111111我需要转换为127
。我已经看过了,但我没有成功地找到其中一个答案并让它对我有用
我如何进行转换
澄清:我正在尝试将一个2的补码形式的
字节
转换为int
,而不是将二进制值的字符串
表示转换为`int.您需要将其转换为sbyte
public static int ConvertTwosComplementByteToInteger(byte rawValue)
{
// If a positive value, return it
if ((rawValue & 0x80) == 0)
{
return rawValue;
}
// Otherwise perform the 2's complement math on the value
return (byte)(~(rawValue - 0x01)) * -1;
}
byte b = 0b10000000;
sbyte s = (sbyte)b;
Console.WriteLine(s); // -128
可能重复使用:int i=BitConverter.ToInt32(字节,0);其中bytes是字节数组:)int value=(sbyte)byteval<代码>11111111中的两个补码不是-128。您确定这是正确的测试用例吗?你能给这个问题添加更多的测试用例吗?OP对2的补码编码的含义感到困惑-2进制的128补码是2进制的10000000。对不起,我用OP的例子试过了。刚刚意识到这是错误的抱歉在我彻底检查之前我投了否决票。虽然这是正确的,但有点复杂。如果你编辑你的答案,我将能够删除否决票。很抱歉