我想在C#中创建一个Byte数组,第一个和第二个字节必须分别为70和75:
所以我做了类似的事情:
List<byte> retval = new List<byte>();
retval.Add(Convert.ToByte(75));
retval.Add(Convert.ToByte(70));
我认为该函数会将数字转换为字节,如果我在运行时将监视放在arrayList上,那么它看起来会有所不同,但它没有改变。我期待看到格式为0x00的值,但它仍然看起来像原始整数。
我错过了什么吗?
答案 0 :(得分:5)
右键单击“监视窗口”或“立即窗口”,然后选中“十六进制显示”选项。默认情况下,对于字节,它设置为“未选中”,因为Visual Studio IDE假定您更愿意读取int值而不是字节:
答案 1 :(得分:1)
byte
是一个整数值,它与所有其他整数类型一样,在将它们转换为表示形式之前,看起来像一样。它们都是硅芯片上的电荷。
byte
,ushort
,uint
和ulong
都是不同长度的无符号整数类型(分别为1,2,4和8个八位字节)。它们存储为二进制(基数为2)的数字,每个位表示2的幂,低位(逻辑上,最右侧)位表示2 0 或1且高 - 对于该大小,可能代表两个可能的最高幂的顺序位(分别为:2 7 ,2 15 ,2 31 和2 63
sbyte
,short
,int
和long
是签名不同长度的整数类型(1,2,4和分别为8个八位字节)。然而,在内部,它们存储在所谓的二进制补码表示法中
这意味着,高阶位是符号位(0表示非负,1表示负数)。非负值(x> = 0)如上所示,除了可以表示的2的最大功率,分别为2 6 ,2 14 ,2 30 和2 62 ,因为高位是为符号保留的。
负数存储为绝对值的二进制补码。这允许通过加法电路执行减法,减法是添加负数。要获得数字的二进制补码,请执行以下过程:
所以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进位标志。