首页 文章

32位数字的十六进制表示

提问于
浏览
-1

我有一个脚本生成两个随机的32位浮点数a和b,并将它们分开以产生输出c .

我想以十六进制格式存储所有这三个浮点数,作为包含8个字符的字符串 .

我在网上找到了一个聪明的方法:

http://forums.devshed.com/c-programming-42/printing-a-float-as-a-hex-number-567826.html

这是我在C中实施他们的建议

fileout << hex << *(int*)&a[i] << endl;
    fileout << hex << *(int*)&b[i] << endl;
    fileout << hex << *(int*)&c[i] << endl;

这适用于大多数情况 . 但是,有些情况下,字符串不是8个字符宽 . 有时他们只有一点点 . 以下是输出的示例:

af1fe786
                    ffbbff0b
                    fffbff0b
                    7fbcbf00  <-I like it, but has zeros at the end 
                    77fefe77
                    7ffcbf00
                    fdad974d
                    f2fc7fef
                    4a2fff56
                    67de7744
                    fdf7711b
                    a9662905
                    cd7adf0   <-- problem
                    5f79ffc0
                    0         <--- problem
                    6ebbc784
                    cffffb83
                    de3bcacf
                    e7b3de77
                    ec7f660b
                    3ab44ae4
                    aefdef82
                    fffa9fd6
                    fd1ff7d2
                    62f4      <--why not "62f40000"
                    ebbf0fa6
                    ddd78b8d
                    4d62ebb3
                    ff5bbceb
                    3dfc3f61
                    ff800000 <- zeros at end, but still 8 bytes?
                    df35b371
                    e0ff7bf1
                    3db6115d
                    fbbfbccc
                    ddf69e06
                    5d470843
                    a3bdae71
                    fe3fff66
                    0         <--problem
                    979e5ba1
                    febbe3b9
                    0         <-problem
                    fdf73a80
                    efcf77a7
                    4d9887fd
                    cafdfb07
                    bf7f3f35
                    4afebadd
                    bffdee35
                    efb79f7f
                    fb1028c   <--problem

我想要8个字符的表示 . 至于零的情况,我想将其转换为“00000000” .

但我真的很困惑那些长度只有4,5,6,7个字符的人 . 为什么有些数字在最后被填零而其他数字被截断?如果int是32位,为什么有时只显示一位?这是否是臭名昭着的“次正常”数字?

谢谢 .

3 回答

  • 6

    如果我正确理解了您的要求,如果位数小于8,您希望在十六进制表示的左侧添加零作为填充字符 .

    在这种情况下,您只需使用std::setfill() std::setw()流操纵器:

    #include <iomanip> // Necessary for the setw and setfill
    
    int n = ...;
    std::cout << std::hex << std::setw(8) << std::setfill('0') << n;
    

    例如,对于 n = 1024 ,输出将为:

    00000400
    
  • 0

    使用std::setw()std::setfill()

    fileout << hex << setw(8) << setfill('0') << *(int*)&a[i] << endl;
    fileout << hex << setw(8) << setfill('0') << *(int*)&b[i] << endl;
    fileout << hex << setw(8) << setfill('0') << *(int*)&c[i] << endl;
    
  • -1

    忘记聪明(除了) . 看看 setwsetfill .

相关问题