Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一个字节转换为两个';它的补语形式';s的整数值?C#_C# - Fatal编程技术网

如何将一个字节转换为两个';它的补语形式';s的整数值?C#

如何将一个字节转换为两个';它的补语形式';s的整数值?C#,c#,C#,给定一个2的补码形式的字节,我试图将该字节转换为十进制表示形式。例如,字节10000000我需要转换为-128,而字节

给定一个2的补码形式的字节,我试图将该字节转换为十进制表示形式。例如,
字节
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的例子试过了。刚刚意识到这是错误的抱歉在我彻底检查之前我投了否决票。虽然这是正确的,但有点复杂。如果你编辑你的答案,我将能够删除否决票。很抱歉