我有正整数的3个基本表示:
我希望能够以最有效的方式在所有3个表示中的数字之间进行转换.即实现以下6个功能:
unsigned long int Binary2Dec(const string & Bin) {}
unsigned long int Hex2Dec(const string & Hex) {}
string Dec2Hex(unsigned long int Dec) {}
string Binary2Hex(const string & Bin) {}
string Dec2Binary(unsigned long int Dec) {}
string Hex2Binary(const string & Hex) {}
Run Code Online (Sandbox Code Playgroud)
每种方法最有效的方法是什么?我可以使用C和C++,但不能提升.
编辑:"效率"是指时间效率:最短的执行时间.
使用gcc在linux上编译.
我想将其转换为十六进制.10这将是一个.我设法做到这一点将下面的代码.
unsigned int index = 10;
char index_buff[5] = {0};
sprintf(index_buff, "0x%x", index);
data_t.un32Index = port_buff;
Run Code Online (Sandbox Code Playgroud)
但是,问题是我需要将它分配给一个结构,我需要分配的元素是unsigned int类型.
但这有效:
data_t.un32index = 0xa;
Run Code Online (Sandbox Code Playgroud)
但是,我的示例代码不起作用,因为它认为我试图从字符串转换为unsigned int.
我试过这个,但这也失败了
data_t.un32index = (unsigned int) *index_buff;
Run Code Online (Sandbox Code Playgroud)
非常感谢任何建议,
我需要从二进制文件中读取值,数据格式是 IBM 单精度浮点(4 字节十六进制指数数据)并将该值用作十进制数。我有从文件中读取并取出每个字节并像这样存储的 C++ 代码
unsigned char buf[BUF_LEN];
for (long position = 0; position < fileLength; position += BUF_LEN) {
file.read((char* )(&buf[0]), BUF_LEN);
// printf("\n%8ld: ", pos);
for (int byte = 0; byte < BUF_LEN; byte++) {
// printf(" 0x%-2x", buf[byte]);
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印出每个字节的十六进制值。
此图指定 IBM 单精度浮点 IBM 单精度浮点 我不明白 24 位正二进制小数是什么。我知道如何在 hex<->dec<->binary 之间进行转换,所以我的基本理解是将所有 q 视为一个非常长的二进制段,将使用 Q24(2)^(23) 作为最大的value 同时将所有前面的值加在一起,然后将数字乘以 10^-24 。但我的直觉告诉我这是错误的。澄清什么是基数点或 MSB 会有所帮助。
转换为十六进制:
cout << hex << int(x) << endl;
Run Code Online (Sandbox Code Playgroud)
相反,如何从十六进制转换为十进制?
输入十六进制数简单:
cin >> hex >> x;
Run Code Online (Sandbox Code Playgroud)