Tag: endianness

ByteBuffer getInt()问题

我们使用Java ByteBuffer与C ++服务器进行套接字通信。 我们知道Java是Big-endian,而Socket通信也是Big-endian。 因此,每当字节流接收并由Java放入ByteBuffer时,我们调用getInt()来获取值。 没问题,没有转换。 但是,如果我们以某种方式将ByteBuffer字节顺序专门设置为Little-endian(我的同事实际上已经这样做了), 当数据放入ByteBuffer时,Java会自动将Big-endian转换为Little-endian吗? 那么Little-endian版本的getInt()会给你一个正确的值吗? 我想上面两个问题的答案是肯定的。 但是当我尝试validation我的猜测并试图找到getInt()在ByteBuffer中的工作原理时,我发现它是一个抽象方法。 ByteBuffer的唯一子类是MappedByteBuffer类,它没有实现抽象的getInt()。 那么getInt()方法的实现在哪里呢? 对于发送,因为我们使用的是Little-endian ByteBuffer,我们需要在放入套接字之前将它们转换为Big-endian字节。

用于反转字节顺序/更改字节顺序的命令行

我在一些脚本中乱砍,试图解析由Javas DataOutputStream#writeLong(…)编写的一些数据。 由于java似乎总是写大端,我在将字节输入od遇到问题。 这是因为od总是假设endianess与你当前所在的arch的endianess相匹配,而且我在一个小端机器上。 我正在寻找一个简单的单行程来反转字节顺序。 假设你知道文件的最后8个字节是由前面提到的writeLong(…)方法写的长的。 我目前打印这篇文章的最佳尝试是 tail -c 8 file | tac | od -t d8 ,但是tac似乎只对文本起作用(足够公平)。 我发现了一些对dd conv=swab引用,但这只是成对交换字节,并且不能反转这8个字节。 有谁知道这个好的单行程?

(java)在文件little endian中编写

我正在尝试编写TIFF IFD,我正在寻找一种简单的方法来执行以下操作(这段代码显然是错误的,但它可以解决我想要的问题): out.writeChar(12) (bytes 0-1) out.writeChar(259) (bytes 2-3) out.writeChar(3) (bytes 4-5) out.writeInt(1) (bytes 6-9) out.writeInt(1) (bytes 10-13) 写道: 0c00 0301 0300 0100 0000 0100 0000 我知道如何让写入方法占用正确的字节数(writeInt,writeChar等),但我不知道如何让它以小端编写。 谁知道?

如何在Java或python中获得endianess?

在C我可以通过以下方法获得机器的Endianess 。 我如何使用python或Java程序? 在Java中,char是2-bytes与C不同,它是1-byte 。 我认为python可能不可能,因为它是一种dynamic language ,但我可能是错的 bool isLittleEndian() { // 16 bit value, represented as 0x0100 on Intel, and 0x0001 else short pattern = 0x0001; // access first byte, will be 1 on Intel, and 0 else return *(char*) &pattern == 0x01; }

在Java中,当使用DataOutputStream写入文件时,如何定义正在写入的数据的Endian?

我正在使用DataOutputStream写入文件,但我想更改数据的endian。 这就是我将字节数据写入文件的方式(默认情况下以Little endian输出) public void generateBinObjFile(String outputFile) try { // Create file DataOutputStream stream = new DataOutputStream( new FileOutputStream(outputFile)); stream.writeShort(this.quantize(this.xComponents.get(index), //<– Short is written in little Endian this.min_x, this.max_x) – 32768); } // catch statements here 有没有办法可以定义字节数据用Java编写的Endian?

Java:DataInputStream替换字节序

下面是我的代码,它替换了DataInputStream以包装InputStream,但除了读取大端类型的常规方法之外,还提供了读取小端数据类型的额外方法。 如果你愿意,可以随意使用它。 我有一些保留如下。 请注意不改变function的方法(读取大端类型的函数)。 我无法将DataInputStream实现为基类并使用其方法,如read(),readInt(),readChar()等? 我的class级层次似乎有点奇怪。 这个合适吗? 这些其他类型如readUTF()或readLine()是否需要一个小的endian版本? 或者这是特定程序的主观? Java如何存储布尔类型? 字节顺序是否也是主观的? 谢谢你满足我的好奇心:) import java.io.*; /** * Replacement for a DataInputStream that provides both little and big endian reading capabilities for convenience without need to implement a ByteBuffer * @author Bill (unspecified.specification@gmail.com) */ public class EndianInputStream extends InputStream implements DataInput { private DataInputStream dataInStream; private InputStream […]