数组的 C 编程

标签 c arrays

我是 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/

相关文章:

c++ - 在多线程环境中什么会导致 "bad file descriptor"?

c - 如何读取文件位置指示器处的单个值?

编译多个 .c 和 .h 文件

无法在 Eclipse 中使用 gcc -shared 找到库来构建 dll

c - 3D 矩阵求和 cuda

ios - 快速检查数组元素

javascript - 如何获取数组中所有重复项的总和?

php - 关联数组 Push Shift Items

javascript - 我如何通过 JavaScript 中的索引引用数组项?

javascript - 普通 OOP Javascript : Treating localStorage as an Array doesn't work?