当我想写出无符号短值时获取有符号的短值

时间:2014-11-10 09:06:00

标签: java unsigned short

使用此处提供的解决方案 - Java input and output binary file byte size are not matching after transformation我写了一个包含无符号短路的二维数组到磁盘。当我通过读取它来检查该文件的值时,我仍然看到有符号值,即负值。代码中的错误是什么?

fos = new FileOutputStream(destFile);
short[][] data = getData(); //defined in another class
if (ByteOrder.nativeOrder().equals(ByteOrder.BIG_ENDIAN)
 {
   for (int i = 0;i<1200;i++)
    {
      for (int j = 0; j <1200;j++)
        {      
          fos.write((data[i][j] >> 8) & 0xFF);
          fos.write(data[i][j] & 0xFF);
        }
    }
 }
 else
     {
       for (int i = 0;i<1200;i++)
         {
          for (int j = 0; j <1200;j++)
           {
             fos.write(data[i][j] & 0xFF);
             fos.write((data[i][j] >> 8) & 0xFF);

            }
         }     
     }

1 个答案:

答案 0 :(得分:1)

Java没有unsigned short数据类型,但不用担心,代码工作正常。有符号和无符号的位模式是相同的,区别在于如何解释第一位。如果你想要短符号的无符号值,你可以使用AND运算符:

int unsignedValue = signedShortValue & 0xFFFF;