如何将8字节HEX转换为BIN

时间:2012-03-05 19:57:28

标签: c++ binary-data

我的论文的一小部分是编写转换8字节HEX(如12345678)输入的代码 到bin(10010001101000101011001111000)输出。

我不知道如何开始这个。我没有上过任何C ++课程;我刚看了几个教程。有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

认真思考,思考一下。

首先,您必须确定最高有效位(MSB)是先输出还是最低有效位(MSB)。在本例中,我将首先介绍如何输出最低有效位。

二进制逻辑

要理解的第一个概念是二元AND运算符。 A 1 AND 0为零,1 AND 1为1,0 AND 0为零。通过使用此运算符,可以隔离任何位。

位移

另一个概念是位移。移动意味着将每个位移动一个位置(向右除以2)或向左移动(乘以2)。这个概念将用于确定要隔离的位。

隔离零和

该算法将测试一个位,并为该位的值输出零或1:

if ((value & 1) == 0) cout << "0"
else cout << "1";

8位无符号整数的二进制输出:

每个位将通过在循环中将“掩码”位移1来进行测试:

uint8_t mask = 1;    // Modify this line for outputting MSB.
uint8_t value = 0x5a; // 0101 1010
for (unsigned int count = 0; count < CHAR_BIT; ++count)
{
    if ((value & mask) == 0)
    {
        cout << "0";
    }
    else
    {
        cout << "1";
    }
    mask = mask << 1;  // Modify this line to output MSB format
}

将此算法应用于多个字节留给读者。 :-)

答案 1 :(得分:2)

您可以使用std::bitset<>::to_string功能。

#include <iostream>
#include <bitset>

int main () {
  unsigned long long x;
  std::cin >> std::hex;
  while(std::cin >> x) {
    std::cout << std::bitset<32>(x).to_string() << "\n";
  }
}

答案 2 :(得分:0)

首先,8字节HEX看起来不像(12345678)。 它由两个代表4位的字符(0-F)组成 喜欢 0x41(HEX)== 65(DECIMAL)== 01000001(BIN)=='a'(CHAR)等于1 BYTE

如果那是你的问题,你对你的问题有很好的答案。

PS。 uint8_t是“stdint.h”成员,你不会在任何地方找到它(例如在VS中)

使用unsigned char代替

unsigned char *r;
if(!(r=(unsigned char*)malloc(sizeof(unsigned char)*8)))
    return 0;
int arg = 65;
int i=0;
int p=0;
do{
p=(int)(pow(2,i));
    if (arg&p)
       r[7-i]=1;
    else
       r[7-i]=0;
    i++;                   
}while (i<8);
for (int i=0;i<8;i++)
  printf("%d",r[i]);
getc(stdin);

arg = 65

r = 01000001

从arg打印HEX    的printf( “%X”,ARG);或“%p”或“%x”

这里你的每个字符串都存储在int数组中,这意味着4位为1位。

当然c ++允许你通过HEX声明变量

**int arg = 0x41;**