我是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);
}

10-08 04:10