我花了一天的大部分时间追查二进制重建错误,并想了解原因:
特定的代码行如下所示(dataBuffer
是一个字节数组):
short data = (short) ((short)dataBuffer[curPos + 3] << 8 | ((short)dataBuffer[curPos + 2]));
它偶尔会返回垃圾,直到我为低位词添加掩码:
short data = (short) ((short)dataBuffer[curPos + 3] << 8 | (((short)dataBuffer[curPos + 2])) & 0xff);
所以,我的解释是,从byte
to的类型转换short
偶尔会在高位词中留下垃圾,在它被 or-ed 时引起问题......但这并没有多大意义。
这段代码取自 c++ 并在那里工作得很好......我错过了什么?