C#字节数组 - 有符号和无符号两难

pul*_*988 1 c# byte

我从一个带符号的字节数组开始并转换为unsigned ..所以打印结果是否正确?

byte[] unsigned = new byte[] {10,100,120,180,200,220,240};
sbyte[] signed = Utils.toSignedByteArray(unsigned);
Run Code Online (Sandbox Code Playgroud)

和print(我只是用StringBuilder附加它们):

签字:[10,100,120,-76,-56,-36,-16]
无符号:[10,100,120,180,200,220,240]

哪里:

public static sbyte[] toSignedByteArray(byte[] unsigned){
    sbyte[] signed = new sbyte[unsigned.Length];
    Buffer.BlockCopy(unsigned, 0, signed, 0, unsigned.Length);
    return signed;
}
Run Code Online (Sandbox Code Playgroud)

如果我改为这个,我会得到相同的结果.

sbyte[] signed = (sbyte[])(Array)unsigned;
Run Code Online (Sandbox Code Playgroud)

不应该-128(签名)变为0,-118变为10,依此类推......而不是10(签名)= 10(未签名)!?

因为
sbyte -128到127
字节0到255

所以??

dtb*_*dtb 6

有符号整数表示在二进制补码系统中.

例子:

Bits        Unsigned     2's complement
            value        value

00000000    0            0
00000001    1            1
00000010    2            2
01111110    126          126
01111111    127          127
10000000    128          ?128
10000001    129          ?127
10000010    130          ?126
11111110    254          ?2
11111111    255          ?1
Run Code Online (Sandbox Code Playgroud)