Java 如何将原始图像转换为有符号32位
我用dd命令创建了一个文件(原始文件)。我用祝福打开了它,如下图所示: 现在,我想从这个文件中提取数据,并获得在有符号32位下显示的内容(如果您看到图像84是我想要的数字)。因此,我希望以这种方式转换以下字符串: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个
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) {