C++ 将十六进制数与零串联

C++ 将十六进制数与零串联,c++,hex,24-bit,C++,Hex,24 Bit,我编写了一个简单的代码,将小数转换为24位(3个字节,6个字符)的十六进制数 假设输入0.5,它将提供十六进制数0x400000 0.1 = 0xccccd 0.001 = 0x20c5 虽然答案是正确的,但我想做的是保留6个字符的表示形式,因此我希望0.1=0x0cccd和 0.001为=0x0020c5 我认为一种可能的方法是将十六进制结果转换为字符串,然后使用strlen检查位数,然后将结果与适当的零连接起来。这个方法的问题是我不确定如何将十六进制结果存储在变量中 我想,即使我将十六进制

我编写了一个简单的代码,将小数转换为24位(3个字节,6个字符)的十六进制数

假设输入0.5,它将提供十六进制数0x400000

0.1 = 0xccccd
0.001 = 0x20c5
虽然答案是正确的,但我想做的是保留6个字符的表示形式,因此我希望0.1=0x0cccd和
0.001为=0x0020c5

  • 我认为一种可能的方法是将十六进制结果转换为字符串,然后使用strlen检查位数,然后将结果与适当的零连接起来。这个方法的问题是我不确定如何将十六进制结果存储在变量中
  • 我想,即使我将十六进制数转换为字符串并找到要连接的零的数目,程序也会有点笨重。也许有一个更简单的方法来实现我想做的事情。我只是不知道怎么做。 希望有人能给我指路。我写的程序如下
    while(true){
    浮式压裂;
    标准::库特>压裂编号;
    如果(!分形编号){
    打破
    }
    const int max_limit_24=exp2(23);//0x7FFFFF(1.0)的最大值
    浮动内六角;
    内部六角=圆形(最大极限24*分形编号);
    int int_inter_hex=int(inter_hex);
    std::cout
    #包括
    int val=0x20c5;
    
    std::我可以试一下你推荐的吗,它在名称空间std中说“没有名为setw的成员”,在名称空间std中说“没有名为setfill的成员”.你能告诉我我需要使用什么头文件来使上面的行有效吗?编辑后包含了#includeHanks,这很有效。出于好奇,你还记得所有的头文件吗???)我几乎记不起基本的头文件。甚至不太清楚,呵呵。如果你不记得确切的头文件或exac是什么,这对查找内容很有用t用法是。
    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';