我正在转换使用Java但不适用于C#的代码
byte[] buffer = new byte[64];
this.buffer[((int)this.count & 0x3F)] = -128;
Run Code Online (Sandbox Code Playgroud)
这会产生编译时错误"常量值'-128'无法转换为'字节'." 如何为一个字节存储负数?
Joh*_*mse 16
在C#中,a byte表示无符号的 8位整数,因此不能保持负值(有效值范围为0to 255).另一种方法是sbyte,它是一个带符号的 8位整数(来自-128to的有效值127).
byteJava中的数据类型已签名(-128-127).C#中的等效数据类型是sbyte.
所以等效的C#代码如下:
sbyte[] buffer = new sbyte[64];
buffer[..] = -128;
Run Code Online (Sandbox Code Playgroud)
如果需要无符号字节数组(0-255),则byte与sbyte-128 具有相同位模式的是128(0x80).
byte[] buffer = new byte[64];
buffer[..] = 128;
Run Code Online (Sandbox Code Playgroud)
另请参见: 积分类型表(C#参考)