【问题标题】:concatenating a Hexadecimal number with zeros用零连接一个十六进制数
【发布时间】:2017-05-01 03:06:48
【问题描述】:

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

假设您输入 0.5,它提供的十六进制数为 0x400000。

0.1 = 0xccccd
0.001 = 0x20c5

虽然答案是正确的,但我想做的是保留 6 个字符的表示,所以我希望 0.1 = 0x0ccccd 并且
0.001 = 0x0020c5。

  1. 我认为一种可能的方法是将十六进制结果转换为字符串,然后使用 strlen 检查位数,然后将结果与适当的零连接。这种方法的问题是我不确定如何将十六进制结果存储在变量中。
  2. 我认为即使我将十六进制数转换为字符串并找到要连接的零数,程序也会有点笨拙。可能有一种更简单的方法来实现我想做的事情。我只是不知道怎么做。 希望有人能告诉我前进的方向。我写的程序如下。
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" ;
}

【问题讨论】:

    标签: c++ hex 24-bit


    【解决方案1】:
    #include <iomanip>
    int val = 0x20c5;
    std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n';
    

    如果您只需要它在输出中具有前导 0。如果您确实想将其存储为字符串,则可以使用 std::stringstream 而不是 std::cout 并从中获取字符串。

    【讨论】:

    • 我刚刚尝试了你推荐的,它在命名空间 std 中显示“没有名为 setw 的成员”。和“命名空间 std 中没有名为 setfill 的成员”。你能告诉我我需要使用什么头文件来使上面的行有效吗?
    • 编辑以包含#include
    • 谢谢,那行得通。出于好奇,你还记得所有的头文件吗? :) 我几乎记不起基本的了。
    • 甚至没有接近,呵呵。 en.cppreference.com/w 如果您不记得确切的标题或确切的用法,则可用于查找内容。
    猜你喜欢
    • 2013-04-18
    • 2023-03-25
    • 2019-09-21
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多