2013-02-16 49 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; 
相關問題