Java 如何将原始图像转换为有符号32位

Java 如何将原始图像转换为有符号32位,java,hex,bytearray,signed,endianness,Java,Hex,Bytearray,Signed,Endianness,我用dd命令创建了一个文件(原始文件)。我用祝福打开了它,如下图所示: 现在,我想从这个文件中提取数据,并获得在有符号32位下显示的内容(如果您看到图像84是我想要的数字)。因此,我希望以这种方式转换以下字符串: 10 00 00 00 --> 84 54 00 00 00 --> 70185301 为了完成这个转换,我构建了以下程序,它打开文件,解码行并将结果写入一个新文件 下面是进行提取的一段代码(@Duncan帮助我创建了它): 你知道我的问题在哪里吗 谢谢 Long有8个

我用dd命令创建了一个文件(原始文件)。我用祝福打开了它,如下图所示:

现在,我想从这个文件中提取数据,并获得在有符号32位下显示的内容(如果您看到图像84是我想要的数字)。因此,我希望以这种方式转换以下字符串:

10 00 00 00 --> 84
54 00 00 00 --> 70185301
为了完成这个转换,我构建了以下程序,它打开文件,解码行并将结果写入一个新文件

下面是进行提取的一段代码(@Duncan帮助我创建了它):

你知道我的问题在哪里吗

谢谢

Long有8个字节,您只想转换4个字节

不要使用偏移量

in.readFully( buffer, 0, 4 );

$ echo $[0x1000000000]
68719476736
$ echo $[0x5400000000]
360777252864
这是由于读取时4字节的偏移量(不正确)造成的

还有一个应该纠正的问题:

 while (count < input.length() - 3) {
while(计数
它与BIG_ENDIAN一起工作吗?您的第一个问题是,
10 00 00
十六进制绝对不可能变成
84
十进制。84d是0x54。您在图像中圈出的内容完全混乱。在祝福您没有选择
10 00 00
时,请查看“带符号的32位值”的右侧椭圆,你会看到等价的十六进制表示为
54 00
@ElliottFrisch,所以我的问题是如何从我的原始图像中得到84?我非常困惑…因此,84怎么可能从这个选择中出来(你说不是,但我很确定它是被选中的)也许是我的问题,所以,您使用int是因为我只需要4个字节。这很有意义。我理解in.readfull(buffer,0,4);但我不明白为什么(countString s= Integer.toString( ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN).getInt());
in.readFully( buffer, 0, 4 );

$ echo $[0x1000000000]
68719476736
$ echo $[0x5400000000]
360777252864
 while (count < input.length() - 3) {