第一个问题:我有一个二进制字符串" 11001"我将它转换为带有此函数的int,将其转换为25,当我返回它时,它返回' 25 x19'而不是unsigned char 11001。
第二个问题:当我输入二进制字符串" 1111"时,屏蔽工作直到它到达屏蔽" 1000"哪个不起作用,但是" 10000" - 掩码的最后一次迭代突然发挥作用。含义: 0001 + 0010 + 0100 + 10000 = 23
而不是0001 + 0010 + 0100 + 1000 = 15.
任何想法?
我会解释我想要做的事情:
我想做的是转换" 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
答案 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。