c++ - 将 m 字节的数组拆分为 n 字节的 block

标签 c++ c byte

我正在开发一个处理大脑数据的程序。它接收一个值,该值表示 8 种公认的 EEG(脑电波)类型的当前幅度。此数据值以小端格式输出为一系列八个 3 字节无符号整数。

这是我的一段代码:

    if (extendedCodeLevel == 0 && code == ASIC_EEG_POWER_CODE)     
    {
         fprintf(arq4, "EXCODE level: %d CODE: 0x%02X vLength: %d\n", extendedCodeLevel, code, valueLength );
         fprintf(arq4, "Data value(s):" );
         for( i=0; i<valueLength; i++ ) fprintf(arq4, " %d", value[0] & 0xFF );
      }

value[0] 是我的输出。它是代表脑电波的一系列字节。当前输出文件包含以下数据:

EXCODE level: 0x00  CODE: 0x83 vLength: 24
Data value(s): 16 2 17 5 3 2 22 1 2 1 0 0 0 4 0 0 3 0 0 5 1 0 4 8

我需要的是将上面的字节序列分成 3 个字节的 block ,以识别 EEG。 wave delta 由第一个 3 字节序列表示,theta 由接下来的字节表示,依此类推。我该怎么做?

最佳答案

假设您知道您的输入始终恰好是八个三位整数,您所需要的只是一个简单的循环,从输入中读取三个字节并将它们写出为一个四字节的值。最简单的方法是将输入视为一个字节数组,然后以三个为一组从该数组中提取字节。

// Convert an array of eight 3-byte integers into an array
//  of eight 4-byte integers.
void convert_3to4(const void* input, void* output)
{
   uint32_t   tmp;
   uint32_t*  pOut = output;
   uint8_t*   pIn = input;
   int        i;

   for (i=0; i<24; i+=3)
   {
      tmp  = pIn[i];
      tmp += (pIn[i+1] << 8);
      tmp += (pIn[i+2] << 16);
      pOut[((i+2) / 3)] = tmp;
   }
}

关于c++ - 将 m 字节的数组拆分为 n 字节的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987461/

相关文章:

c++ - Kinect SDK c++ 抓取和按下手势

c# - 从 C# 调用 DLL 时,为什么小结构会错位函数参数?

C++ 模板特化问题

c - 这个指针别名是如何工作的?

java - 是否有某些语言允许负模数的原因?

java - 比较字节子数组的快速方法

java - 使用公式 int unsignedByte =signedByte >= 0 将有符号字节转换为无符号字节?有符号字节 : 256 + signedByte;

c++ - 包装到具有可变数量参数的函数

c - 使用 C 中的管道创建客户端和服务器时的奇怪行为

byte - 一个字节总是8位吗?