为什么我不能在字节变量中存储负值
本文关键字:存储 变量 字节 不能 为什么 | 更新日期: 2023-09-27 18:00:09
我正在转换在Java中有效但在C#中无效的代码
byte[] buffer = new byte[64];
this.buffer[((int)this.count & 0x3F)] = -128;
这会生成一个编译时错误"无法将常量值"-128"转换为"字节"。如何为字节存储负数?
在C#中,byte
表示一个无符号8位整数,因此不能包含负值(有效值范围从0
到255
)。另一种选择是sbyte
,它是一个有符号8位整数(从-128
到127
的有效值)。
Java中的byte
数据类型是带符号的(-128–127)。C#中的等效数据类型是sbyte
。
因此,等效的C#代码如下:
sbyte[] buffer = new sbyte[64];
buffer[..] = -128;
如果您想要一个无符号字节(0–255)的数组,则与sbyte
-128具有相同位模式的byte
为128(0x80)。
byte[] buffer = new byte[64];
buffer[..] = 128;
另请参阅:积分类型表(C#参考)