9

我正在转换适用于 Java 但不适用于 C# 的代码

byte[] buffer = new byte[64];
this.buffer[((int)this.count & 0x3F)] = -128;

这会生成一个编译时错误“常量值 '-128' 无法转换为 'byte'”。如何存储一个字节的负数?

4

2 回答 2

16

在 C# 中,abyte表示一个无符号的8 位整数,因此不能保存负值(有效值范围从0255)。另一种方法是sbyte,它是一个有符号-128的 8 位整数(从到的有效值127)。

于 2013-02-18T15:07:25.710 回答
9

Java 中的byte数据类型是有符号的(-128–127)。C# 中的等效数据类型是sbyte.

所以等效的C#代码如下:

sbyte[] buffer = new sbyte[64];
buffer[..] = -128;

如果您想要一个无符号字节数组(0–255),则byte与 -128 具有相同位模式的sbyte128 (0x80)。

byte[] buffer = new byte[64];
buffer[..] = 128;

另请参阅: 积分类型表(C# 参考)

于 2013-02-18T15:08:40.353 回答