我的论文的一小部分是编写转换8字节HEX(如12345678)输入的代码 到bin(10010001101000101011001111000)输出。
我不知道如何开始这个。我没有上过任何C ++课程;我刚看了几个教程。有人可以帮我吗?
答案 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";
每个位将通过在循环中将“掩码”位移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;**