Так, как и в заголовке, я пытаюсь преобразовать шестнадцатеричный в двоичный файл. Но проблема, с которой я столкнулся, заключается в том, что данное значение является типом uint32_t. До сих пор я преобразовал из uint32_t в uint8_t, поэтому каждая из переменных uint8_t содержит 8 бит исходного шестнадцатеричного значения. Я успешно конвертировал шестнадцатеричный в двоичный код в коде, показанном ниже. Но теперь я не могу напечатать его в определенном формате.Преобразовать значение uint8_t в двоичное значение
The Format is:
1101 1110 1010 1101 1011 1110 1110 1111
---0 1010 1101 1011 1110 1110 1111
--01 1011 1110 1110 1111
void convert(uint32_t value,bool bits[],int length)
{
uint8_t a0,a1,a2,a3;
int i,c,k,j;
a0 = value;
a1 = value >> 8;
a2 = value >> 16;
a3 = value >> 24;
for(i=0,c=7;i<=7,c>=0;i++,c--)
{
k = a3>>c;
if(k&1)
bits[i] = true;
else
bits[i] = false;
}
for(i=8,c=7;i<=15,c>=0;i++,c--)
{
k = a2>>c;
if(k&1)
bits[i] = true;
else
bits[i] = false;
}
for(i=16,c=7;i<=23,c>=0;i++,c--)
{
k = a1>>c;
if(k&1)
bits[i] = true;
else
bits[i] = false;
}
for(i=24,c=7;i<=31,c>=0;i++,c--)
{
k = a0>>c;
if(k&1)
bits[i] = true;
else
bits[i] = false;
}
for(i=0;i<32;i=i+4)
{
for(j=i;j<i+4;j++)
{
printf("%d",bits[j]);
}
printf(" ");
}
}
void printBits(bool *bits,int length)
{
int len =32,i,j;
int y = len-length-3;
printf("\n");
for(i=0,j=y;i<32,j<32;i++,j++)
{
// Trying to come up with some idea
}
}
int main(int argc, const char * argv[])
{
uint32_t value = 0xDEADBEEFL;
bool bits[32];
int len;
for ( len = 32; len > 0; len -= 7)
{
convert (value, bits, len);
printBits (bits, len);
}
return 0;
}
Хотя я думаю, что основная идея состоит в том, что на каждой итерации Len из 32 битов должны быть преобразованы в двоичную и печататься, я не был в состоянии включить эту идею в свой код. Поэтому я решил преобразовать весь шестнадцатеричный номер и попытаться напечатать только то, что нужно.
Я думаю, что вы запутались. «hexidecimal» и «binary» - это способы представления значений в виде письменного текста. Если у вас есть 'uint32_t', который содержит _value_, который является просто числом. Он не является ни шестнадцатеричным, ни двоичным. Он _looks_, как будто вы преобразовываете это значение в массив бит? Что такое _not_ 'uint8_t'? Я не вижу ничего, в том числе и гекса. –