将十六进制数与零连接
concatenating a Hexadecimal number with zeros
我写了一个简单的代码来将小数转换为 24 位(3 个字节,6 个字符)的十六进制数。
假设您输入 0.5,它提供的十六进制数为 0x400000。
0.1 = 0xccccd
0.001 = 0x20c5
虽然答案是正确的,但我想做的是保留 6 个字符表示,所以我希望 0.1 = 0x0ccccd 并且
0.001 = 0x0020c5。
- 我认为一种可能的方法是将十六进制结果转换为字符串,然后使用 strlen 检查位数,然后将结果与适当的零连接起来。这种方法的问题是我不确定如何将十六进制结果存储在变量中。
- 我想即使我将十六进制数转换为字符串并找到要连接的零的数量,程序也会有点笨拙。可能有一种更简单的方法来实现我想做的事情。我只是不知道怎么办。
希望有人能告诉我前进的方向。我写的程序如下。
while(true){
float frac_no;
std::cout << "Enter a fractional number(0-1) or press 0 to exit:";
std::cin >> frac_no;
if(!frac_no){
break;
}
const int max_limit_24 = exp2(23); // The maximum value of 0x7FFFFF(1.0)
float inter_hex;
inter_hex = round(max_limit_24*frac_no);
int int_inter_hex = int(inter_hex);
std::cout << std::hex << "0x" << int_inter_hex << "\n" ;
}
#include <iomanip>
int val = 0x20c5;
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';
如果你只需要它在输出中有前导 0。如果你确实想将它存储为一个字符串,你可以使用 std::stringstream 而不是 std::cout 并从中获取字符串。
我写了一个简单的代码来将小数转换为 24 位(3 个字节,6 个字符)的十六进制数。
假设您输入 0.5,它提供的十六进制数为 0x400000。
0.1 = 0xccccd
0.001 = 0x20c5
虽然答案是正确的,但我想做的是保留 6 个字符表示,所以我希望 0.1 = 0x0ccccd 并且
0.001 = 0x0020c5。
- 我认为一种可能的方法是将十六进制结果转换为字符串,然后使用 strlen 检查位数,然后将结果与适当的零连接起来。这种方法的问题是我不确定如何将十六进制结果存储在变量中。
- 我想即使我将十六进制数转换为字符串并找到要连接的零的数量,程序也会有点笨拙。可能有一种更简单的方法来实现我想做的事情。我只是不知道怎么办。 希望有人能告诉我前进的方向。我写的程序如下。
while(true){
float frac_no;
std::cout << "Enter a fractional number(0-1) or press 0 to exit:";
std::cin >> frac_no;
if(!frac_no){
break;
}
const int max_limit_24 = exp2(23); // The maximum value of 0x7FFFFF(1.0)
float inter_hex;
inter_hex = round(max_limit_24*frac_no);
int int_inter_hex = int(inter_hex);
std::cout << std::hex << "0x" << int_inter_hex << "\n" ;
}
#include <iomanip>
int val = 0x20c5;
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';
如果你只需要它在输出中有前导 0。如果你确实想将它存储为一个字符串,你可以使用 std::stringstream 而不是 std::cout 并从中获取字符串。