我是C语言的新手,并且在程序中遇到了麻烦。我有3个数组
大小= 8;
u8 a [size]; // a = 0x0D
u8 b [size]; // b= 0xDE
u16 new_buffer[size]; // i want to see as 0xDE0D on the terminal
我需要在new_buffer中将a的内容作为低位字节移动,将b的内容作为高位字节,然后将new_buffer右移三位。我读了有关它,建议使用两个for循环。我尝试过,但是没有得到适当的输出。
请帮我。
u8 SendBuffer[BUFFER_SIZE];
u8 RecvBuffer[BUFFER_SIZE];
u16 Buffer[BUFFER_SIZE];
int main(void) {
RecvBuffer[0] = 0x00;
RecvBuffer[1] = 0x0D;
if (Status != XST_SUCCESS) {
return XST_FAILURE;
}
printf("Sensor data is = 0x%x \n\r", RecvBuffer[0]);
printf("---Data received successfully---\n\r");
return 0;
}
谢谢
最佳答案
这里有两个版本,具体取决于字节序
for (i=0; i<BUFFER_SIZE; i++) {
// little endian
new_buffer[i] = (u16)a[i] << 8 | (u16)b[i]);
// big endian
new_buffer[i] = (u16)b[i] << 8 | (u16)a[i]);
// bit shift
new_buffer[i] >>= 3;
}
或者,将缓冲区向右旋转3位
u16 bits, prev = 0;
for (i=0; i<BUFFER_SIZE; i++) {
bits = new_buffer[i];
new_buffer[i] = bits >> 3 | prev;
prev = bits << (sizeof(u16)*8 - 3);
}