(已编辑:添加了整个工作代码)我将24位存储为字符串。我使用C并且我希望将从位置0开始的每组8位存储为uint8_t
数组的元素。我试过不同的事情无济于事。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define SIZE 24
char byte(int n, char data[])
{
char substr[8];
for (int i = 0; i < 8; i ++)
{
substr[i] = data[i + n*8];
}
return substr[0];
}
int main (void)
{
uint8_t send[3] = { 0 };
char data[] = "101010101010100100000000";
printf ("Data is = %s\n", data);
for ( int i = 0; i < SIZE/8; i++)
{
for ( int j = 0; j < 8; j++)
{
send[i] |= (data[j+8*i] == '1') << (7-j);
}
printf("%d\n",send[i]);
}
return 0 ;
}
答案 0 :(得分:2)
首先,你不要初始化send
,这样send[i] |= ...
可能会向“垃圾”添加一些内容(实际上它是未定义的行为,但可能只是垃圾)。
所以写uint8_t send[SIZE/8] = { 0 };
其次,它是一个拼写错误,因为它应该是7-j
(而不是7-i
),即(data[j+8*i] == '1') << (7-j);
答案 1 :(得分:1)
因为您只是从{0}小于1
循环for ( int i = 0; i < SIZE/8; i++)
send[i] |= (data[j+8*i] == '1') << (7-i);
将其更改为
send[i] |= (data[j+8*i] == '1') << (7-j);