2013-02-16 30 views
-1

我有一个脚本,它会生成两个随机的32位浮点数a和b,并将它们分开以形成输出c。32位数字的十六进制表示

我想以十六进制格式存储所有这三个浮点数,作为包含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位,为什么有时只有一个位出现?这是由于臭名昭着的“低于正常”数字吗?

谢谢。

+5

这种 “巧妙的方式” 是语言标准是非法的。 – osgx 2013-02-16 10:12:37

+0

'< - 为什么不是“62f40000”'< - 因为它是000062f4。如通常的数字表示,前导零被省略。 – us2012 2013-02-16 10:14:07

回答

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  
-1

忘记聪明(这是什么,但)。请查看setwsetfill

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; 
相关问题