我的数据是2d 32位2D指针图像,该图像采用大字节序,我希望将其转换为小字节序。请检查以下代码:

  float** ReverseFloat( const float **inFloat )
 {
   float **retVal;
   char *floatToConvert = ( char* ) && inFloat;
   char *returnFloat = ( char* ) && retVal;

   // swap the bytes into a temporary buffer
   returnFloat[0] = floatToConvert[3];
   returnFloat[1] = floatToConvert[2];
   returnFloat[2] = floatToConvert[1];
   returnFloat[3] = floatToConvert[0];

   return retVal;
 }


你好根据您的所有建议,我尝试了以下代码,但它给出了所有零值:

float **swapend( float **in ,float **out , int h, int v)
{
  char *floatToConvert = ( char* ) & in;
  char *returnFloat = ( char *) & out;
  for (int m=0; m<h; m++)
    for (int k=0; k<v; k++)
    {
      for (int i=0; i<sizeof(float); i++)
        returnFloat[sizeof(float)-1-i] = floatToConvert[i];
    }

  return out;
}


谢谢。

最佳答案

这将无法可靠地工作。创建一个局部变量retVal,最后返回它。函数结束后,此变量的值最终将是随机的。

我认为这种方法会更好,因为编译器将执行大多数必要的复制:

float be2le( char * floatToConvert ) {
     float buffer;
     char * returnFloat = (char *) &buffer;

     ...swap...

     return buffer;
}

关于c - 将float 32位大字节序转换为小字节序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25060459/

10-09 15:54