我在将二进制值存储到unsigned int
数组时遇到了一些麻烦。我试图将二进制表示作为char
数组传递,但它并没有像我希望的那样工作。我正在做的是使用char
循环遍历while
数组,并将每个数字分配给unsigned int
数组的元素,但这是完全错误的。我非常想知道如何将二进制值存储到unsigned int
中。如何在前面显示零?我尝试将数组中的二进制值放在前面没有0
s,但这不起作用。我可以将二进制值转换为int
值,然后在打印时将其转换回来吗?
这是函数的基本代码
void setstring(unsigned int array[10], char *bitString) {
len=strlen(bitString);
for (int i=1; i<=10; i++) {
for (int p=1; d%32!=0; d++) {
array[10-i]=bitString[len-];
}
}
}
打印只是打印bitString
或阵列,但目前根本没有打印。打印只是一个for
循环,它遍历unsigned int
数组。
答案 0 :(得分:0)
这是你的(设定)功能:
int binary_string_to_integer(const char *str, unsigned int *vl)
{
unsigned int value = 0;
int result = 0;
if (str == NULL || vl == NULL || !strlen(str)) result = -1;
if (!result)
{
while (!result && *str)
{
if (*str != '1' && *str != '0')
{
result = -1;
}
value <<= 1;
value += (*str++ == '1');
}
}
if (!result) *vl = value;
return result;
}
int binary_string_to_integer_array_of_0_or_1(const char *str, int *vl, int skipzeroes)
{
int result = 0;
if (str == NULL || vl == NULL || !strlen(str)) result = -1;
if (!result)
{
while (*str)
{
if (*str != '1' && *str != '0')
{
result = -1;
break;
}
if (skipzeroes && !result && *str == '0')
{
str++;
continue;
}
*(vl + result++) = (*str++ == '1');
}
}
return result;
}
char *reverse(char *str)
{
char tmp;
size_t len;
if (str != NULL)
{
len = strlen(str);
for (size_t i = 0; i < len / 2; i++)
{
tmp = *(str + i);
*(str + i) = *(str + len - i - 1);
*(str + len - i - 1) = tmp;
}
}
return str;
}
char *uint_to_binary_string(unsigned int vl, char *buff)
{
char *ptr = buff;
if (buff != NULL)
{
while (vl)
{
*ptr++ = '0' + (vl & 1);
vl >>= 1;
}
}
*ptr = 0;
return reverse(buff);
}
答案 1 :(得分:0)
您可能正在寻找一个函数来设置unsigned char
变量的特定位。
尝试使用此设置位
void setBit(unsigned char *target, int pos)
{
//pos must be < sizeof(unsigned char)
unsigned char mask=1<<pos;
*target = *target | mask;
}
这是为了取消比特
void unsetBit(unsigned char *target, int pos)
{
unsigned char mask=~(1<<pos);
*target = *target & mask;
}
请注意,pos
从0
开始。
您可以使用这些功能来显示位:
int getBit(unsigned char target, int pos)
{
target = target>>pos;
return target & 1;
}
void printBits(unsigned char target)
{
int i;
for(i=sizeof(target)*8-1; i>=0; --i)
{
printf("%d", getBit(target, i));
}
}
在这些函数中,目标变量通过引用传递。
示例:
unsigned char a=0;
setBit(&a, 0);
setBit(&a, 1);
setBit(&a, 6);
printf("\nBit pattern is: ");
printBits(a);
printf(". Value is %d.", a);
会打印
Bit pattern is: 01000011. Value is 67.
另外
unsetBit(&a, 1);
printf("\nBit pattern is: ");
printBits(a);
printf(". Value is %d.", a);
会给出
Bit pattern is: 01000001. Value is 65.
编辑:This是学习位操作的好地方。