将16位转换为4个字符(以十六进制表示)

时间:2018-08-02 01:11:17

标签: c++ converter visual-studio-express

我想将16位转换为4个十六进制字符。 例如,十六进制的16位1101 1010 1101 0001是DAD1,十进制的是56017。现在我想将此16位转换为DAD1作为字符,以便可以使用该字符写入文本文件。

我的编码部分,变量“ CRC”是来自CRC校验和的结果。现在,我想将16位“ CRC”转换为4个字符,即DAD1(大写字母)。

cout << hex << CRC<<endl;
char lo = CRC & 0xFF;
char hi = CRC >> 8;
cout << hi << endl;
cout << lo;

*******结果********

dad1

2 个答案:

答案 0 :(得分:0)

尝试一下:

#include <iostream>
#include <bitset>
#include <string>
int main()
{
    int i = 56017;
    std::cout <<hex <<i << std::endl;
    std::bitset<16> bin = i;
    std::string str = bin.to_string();
    std::bitset<8> hi(str.substr(0, 8));
    std::bitset<8> lo(str.substr(8, 8));
    std::cout << bin << std::endl;
    std::cout << hi << " " << hi.to_ullong() << std::endl;
    std::cout << lo << " " << lo.to_ullong() << std::endl;
}

或者您也可以

std::cout <<hex << (CRC & 0xFF)<< std::endl;
std::cout << hex << (CRC >> 8) << std::endl;

输出:

enter image description here

答案 1 :(得分:0)

尝试一下:

#include <iostream>
#include <bitset>
#include <limits>

int main()
{
    int i = 56017;
    std::bitset<std::numeric_limits<unsigned long long>::digits> b(i); 
    std::cout<< std::hex << b.to_ullong();    
}