我是 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
我需要将 a 的内容移动为 new_buffer 中的低位字节,将 b 的内容移动为 new_buffer 中的高位字节,然后将 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);
}
关于数组的 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28876507/