转换为字节时整数是什么样的?

时间:2014-01-31 20:30:34

标签: c# bytearray

我想在C#中创建一个Byte数组,第一个和第二个字节必须分别为70和75:

所以我做了类似的事情:

List<byte> retval = new List<byte>();
            retval.Add(Convert.ToByte(75));
            retval.Add(Convert.ToByte(70));

我认为该函数会将数字转换为字节,如果我在运行时将监视放在arrayList上,那么它看起来会有所不同,但它没有改变。我期待看到格式为0x00的值,但它仍然看起来像原始整数。

我错过了什么吗?

2 个答案:

答案 0 :(得分:5)

右键单击“监视窗口”或“立即窗口”,然后选中“十六进制显示”选项。默认情况下,对于字节,它设置为“未选中”,因为Visual Studio IDE假定您更愿意读取int值而不是字节:

enter image description here

答案 1 :(得分:1)

byte是一个整数值,它与所有其他整数类型一样,在将它们转换为表示形式之前,看起来像一样。它们都是硅芯片上的电荷。

byteushortuintulong都是不同长度的无符号整数类型(分别为1,2,4和8个八位字节)。它们存储为二进制(基数为2)的数字,每个位表示2的幂,低位(逻辑上,最右侧)位表示2 0 或1且高 - 对于该大小,可能代表两个可能的最高幂的顺序位(分别为:2 7 ,2 15 ,2 31 和2 63

这意味着,高阶位是符号位(0表示非负,1表示负数)。非负值(x> = 0)如上所示,除了可以表示的2的最大功率,分别为2 6 ,2 14 ,2 30 和2 62 ,因为高位是为符号保留的。

负数存储为绝对值的二进制补码。这允许通过加法电路执行减法,减法是添加负数。要获得数字的二进制补码,请执行以下过程:

  • 反转位
  • 添加1,以常规方式传播任何进位,以获得整数的负数形式。

所以1的否定形式是

binary representation of +1:  0000 0000 0000 0001
invert the bits (complement): 1111 1111 1111 1110
add 1:                        1111 1111 1111 1111

如果添加正面和负面形式,结果为零:

0000 0000 0000 0001
1111 1111 1111 1111
-------------------
0000 0000 0000 0000

将设置CPU进位或整数溢出标志。

零保持不变,零真的没有标志

binary zero:          0000 0000 0000 0000
inverted (complement: 1111 1111 1111 1111
add 1:                0000 0000 0000 0000

并且,更改可以表示的最小负数的符号

largest positive value: 1000 0000 0000 0000
inverted (complement):  0111 1111 1111 1111
add 1:                  1000 0000 0000 0000

你得到它自己,因为它的绝对值比大的正数大1并且将它们加在一起产生预期的零值,因为符号位向左执行,设置进位标志。)

将它们加在一起,它们会产生预期的0,因为进位从高位开始传播,并设置CPU进位标志。