如何从二进制字符串转换为二进制unsigned char

时间:2016-04-22 11:49:37

标签: c

第一个问题:我有一个二进制字符串" 11001"我将它转换为带有此函数的int,将其转换为25,当我返回它时,它返回' 25 x19'而不是unsigned char 11001。

第二个问题:当我输入二进制字符串" 1111"时,屏蔽工作直到它到达屏蔽" 1000"哪个不起作用,但是" 10000" - 掩码的最后一次迭代突然发挥作用。含义: 0001 + 0010 + 0100 + 10000 = 23

而不是0001 + 0010 + 0100 + 1000 = 15.

任何想法?

我会解释我想要做的事情:

  1. 我从一个.txt文件得到一个输入,这是" 11001",我必须将它转换为UNSIGNED CHAR,这只是'只是' 11001
  2. 我想做的是转换" 11001"到25和25到11001,然后将其转换为11001 unsigned char。

    unsigned char stringToBinary(char tmpSubjectStatus[])
    {
        int tmpInteger;
        int tmpBinary = 0; //convert tmpInteger into binary number
        unsigned char tmpBinaryCh;
        int i = 0;
        int mostRightbit = 16;
        tmpInteger = atoi(tmpSubjectStatus); //Convert from string to int
        while (i < 5){
            if (((16 >> i) & tmpInteger) != 0){
                tmpBinary += (16 >> i);
            }
            i++;
        }
        tmpBinaryCh = (unsigned char)tmpBinary;
        return tmpBinaryCh;
    }
    

    以下是完整代码:http://pastebin.com/QNNf3zs7

2 个答案:

答案 0 :(得分:1)

我不明白你在做什么,但是要将一串零和一个字符串转换为整数,以下内容应该有效:

unsigned char stringToBinary(char tmpSubjectStatus[])
{
    int tmpInteger = 0;
    while (*tmpSubjectStatus)
    {
        tmpInteger <<= 1;
        if (*tmpSubjectStatus == '1')
            tmpInteger += 1;
        tmpSubjectStatus++;
    }
    return (unsigned char) tmpInteger;
}

编辑:用核心版本替换代码(小错误)。

描述:只要看到一个新数字,(二进制)数字就会向左移1位并添加新数字(1或0)。第一次它是多余的,但向左移动整数值零1位无效。

答案 1 :(得分:-1)

1000 =2³= 8而不是16.所以你设置的mostRightbit变量对我来说应该是8。