【问题标题】:Convert binary Char array to integer and double arrays in C++ [closed]在 C++ 中将二进制 Char 数组转换为整数和双精度数组 [关闭]
【发布时间】:2013-04-05 13:21:34
【问题描述】:

我有一个包含二进制格式数字的 char 数组。这些数字采用以下格式:整数、整数和双精度数。在 C++ 中将 char 数组转换为整数数组和双精度数组的最佳和最快方法是什么?现在我正在使用以下代码,它工作正常,但我认为它不够高效!

#define SIZE    5000
char chBuf[SIZE];  // contains double numbers in binary format
char dBuf[sizeof(double)];
char IBuf[sizeof(int)];
int count =0;
for (int i=0; i<numberofdata; i++) 
{       
   for (int j=0; j<4; j++)  IBuf[j] = chBuf[j + count];
   Integer[i] =  *(integer*) (IBuf);
   count += sizeof(integer);

   for (int j=0; j<4; j++)  IBuf[j] = chBuf[j + count];
   Integer[i+1] =  *(integer*) (IBuf);
   count += sizeof(integer);

   for (int j=0; j<8; j++)  dBuf[j] = chBuf[j + count];  
   Double[i] =  *(double*) (dBuf);
   count += sizeof(double);
}  

我认为复制部分到 dBuf[] 和 IBuf[] 不应该是必要的,但我不知道如何摆脱它们。

【问题讨论】:

  • “二进制”是指“1011001011..”?
  • 为什么你认为它不够高效?如果您可以确保 chBuf 正确对齐,您应该可以跳过复制步骤,如果有帮助的话。
  • 为什么不直接对指针进行类型转换?
  • 你能提供一个“二进制格式的双数”的例子吗?您遵循哪个 IEEE 规范?
  • @ExP 糟糕,我扩展了你的 cmets...

标签: c++ c binary char type-conversion


【解决方案1】:

无需将数据复制到单独的缓冲区。 此外,您需要注意不要覆盖您的 Integer 值。

int s = 2 * sizeof(int) + sizeof(double);
for (int i = 0; i < numberofdata; i++) {       
   Integer[2 * i] =  *(int*) (chBuf + s * i);
   Integer[2 * i + 1] =  *(int*) (chBuf + s * i + sizeof(int));
   Double[i] =  *(double*) (chBuf + s * i + 2 * sizeof(int));
}  

【讨论】:

  • 如果 chBuf 包含双精度和整数呢?如何将其转换为两个数组,一个整数数组和一个双精度数组?
  • 如果你知道ints和doubles在哪里,你可以遍历数组并将它们提取到对应的double*int*数组中。也许你甚至可以创建一个对应的struct,你可以通过类型转换到原始数组中访问它们。
  • 你觉得我能提高效率吗?
  • 这完全改变了问题。我采纳了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
相关资源
最近更新 更多