比特流在C中保存为uint8_t

时间:2017-10-03 20:03:13

标签: c arrays bit-manipulation

(已编辑:添加了整个工作代码)我将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 ;
}

2 个答案:

答案 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);