Java字节缓冲到C

Java字节缓冲到C,java,c,bytebuffer,Java,C,Bytebuffer,在Windows上的C程序中,我们需要像Java bytebuffer一样读写,它将二进制文件存储在BIG_ENDIAN中 算法描述如下: 需要读写int和float 蒂亚, 伯特我认为困难在于在大端和小端之间转换 本文将帮助您完成Endian转换。它包含交换整数、长整数、浮点数和任意长度字节数组的字节顺序的代码。 交换任意类型的代码如下所示: #include <algorithm> //required for std::swap #define ByteSwap5(x)

在Windows上的C程序中,我们需要像Java bytebuffer一样读写,它将二进制文件存储在BIG_ENDIAN中

算法描述如下:

需要读写int和float

<是否有任何例子C或C++代码来执行这个或引用?< /P> 蒂亚,
伯特

我认为困难在于在大端和小端之间转换

本文将帮助您完成Endian转换。它包含交换整数、长整数、浮点数和任意长度字节数组的字节顺序的代码。

交换任意类型的代码如下所示:

#include <algorithm> //required for std::swap

#define ByteSwap5(x) ByteSwap((unsigned char *) &x,sizeof(x))

void ByteSwap(unsigned char * b, int n)
{
   register int i = 0;
   register int j = n-1;
   while (i<j)
   {
      std::swap(b[i], b[j]);
      i++, j--;
   }
}
#包含//标准::交换所需
#定义ByteSwap5(x)ByteSwap((未签名字符*)&x,sizeof(x))
void ByteSwap(无符号字符*b,整数n)
{
寄存器int i=0;
寄存器int j=n-1;

虽然(i你想使用和类似的。其余的设计是你自己的。

注意:htonl()将用于32位整数,htons()将用于16位整数,而(单字节)8位整数显然不需要字节交换……我应该补充一点,这个解决方案不适用于Java“long”(在C中通常是“long-long”)-您需要使用Robert的通用ByteSwap函数。