我正在开发一个处理大脑数据的程序。它接收一个值,该值表示 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/