Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阵列的C语言编程_C_Arrays - Fatal编程技术网

阵列的C语言编程

阵列的C语言编程,c,arrays,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的内容作为低位字节移动,将b的内容作为高位字节移动到新的\u缓冲区中,然后将新的\u缓冲区右移三位。我读过这篇文章,有人建议使用两个for循环。我试过了,但没有得到合适的输出

我不熟悉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的内容作为低位字节移动,将b的内容作为高位字节移动到新的\u缓冲区中,然后将新的\u缓冲区右移三位。我读过这篇文章,有人建议使用两个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; 
} 

感谢注意
u8
不是标准的一部分,您的意思是
uintX\t
,这些值不是数组而是变量:

uint8_t a = 0X0D;
uint8_t b = 0XDE;
uint16_t new_buffer = ((uint16_t)b << 8) | a; 
uint8\u t a=0X0D;
uint8_t b=0XDE;

uint16_t new_buffer=((uint16_t)b这里有两个版本,具体取决于endian值

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;
}
for(i=0;i 3 | prev;

prev=bits您能显示一些您尝试过的代码吗?显示您所做的尝试通常会得到更有用和更直接的答案8 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(“传感器数据为=0x%x\n\r”,RecvBuffer[0]);printf(“成功接收数据”--\n\r”);return 0;}Arghhh,编辑问题,你作为评论发布的代码真的很难看。从添加的代码来看,原始问题毫无意义,因为两个缓冲区彼此无关。是否要将
RecvBuffer[0]
RecvBuffer[1]合并
要生成16位值?我正在Xilinx SDK中编程,因此u8的无符号8位整数,我得到的输出是2个8位十六进制数据,因为0D和DE我希望在一个名为new_buffer的文件中将它们视为完整的16位数据。这正是@AlterMann在这里提供的。只需将
uint8_t
更改为
u8
uint16_t
更改为
u16
谢谢。一般来说,你能用一个粗略的例子来指导我吗?我有2个8位变量,必须把它复制到一个16位变量中。怎么做?我怎样才能将变量的数据向左或向右移动?我读了这本书,但有一些困惑。如果我能得到一个随机的例子来澄清我的问题,那就太好了。我说得对错过了结尾,但为什么
>3
?我不明白这一点。@AlterMann,因为OP说“然后将
新的缓冲区右移三位”(但他的意思可能是“并流到下一个元素”).谢谢你的帮助..我现在明白了这个想法。N很抱歉,我是这个论坛的新手,所以无法正确使用它,现在我将尝试在我的程序中使用这个想法以获得正确的输出。我在我的程序中尝试了上面的代码,新的缓冲区数据是0x27FB,移动的数据是0x278C。有什么问题吗?请help@nsh我拒绝了您建议的编辑,但您尝试的是
New\u Buffer\u shift[I]>>=3;xil\u printf(“按3位移位的数据等于0x%x\n\r”,New\u Buffer);
-您没有打印移位的变量。
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;
}
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);
}