【问题标题】:C# byte arrays - signed and unsigned dilemmaC# 字节数组 - 有符号和无符号的困境
【发布时间】:2012-05-06 20:50:41
【问题描述】:

我从一个有符号字节数组开始并转换为无符号..那么打印的结果正确吗?

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

还有打印(我只是用 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;
}

如果我改成这个,我会得到相同的结果。

sbyte[] signed = (sbyte[])(Array)unsigned;

不应该 -128(有符号)变成 0,-118 变成 10,等等......而不是 10(有符号)= 10(无符号)!?

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

所以??

【问题讨论】:

    标签: c# byte


    【解决方案1】:

    有符号整数在Two's complement system 中表示。

    例子:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多