我正在将Java应用程序转换为C#,我对基础字节流有一个普遍的问题。
'C'中的'byte'是无符号的,而不是在Java中签名。
这对我的代码部分做了什么,我在比较字节的等效性。例如:
Java代码
public final static byte IAC = (byte)255;
...
void parseBuffer(byte[] bb, int len) {
try {
for(int i = 0;i < len; i++) {
if(bb[i] == IAC)
DoSomething();
}
}
}
我是否需要对IAC变量的声明做任何事情?它会是其他的(字节)255吗?
提前感谢您的帮助。
答案 0 :(得分:1)
我是否需要对IAC变量的声明做任何事情?
没有。这绝对没问题。 IAC的最终值为-1,但这很好,仍然代表一个设置了所有位的字节。如果从C#端发送一个值为255的字节,它将在Java端正确拾取。
另一种替代方法是使用更大的数据类型(例如int
以方便使用,并使用位掩码以[0,255]范围内的值结束:
public static final int IAC = 255;
...
void parseBuffer(byte[] bb, int len) {
try {
for(int i = 0; i < len; i++) {
int value = bb[i] & 0xff; // To get a value in the range [0, 255]
if (value == IAC) {
DoSomething();
}
}
}
}