2017-05-01 21 views
0

我已經寫了一個簡單的代碼來將小數轉換爲24位(3個字節,6個字符)十六進制數。連接一個十六進制數與零

可以說,如果你輸入0.5,它提供的十六進制數字爲0x400000。 0.1 = 0xccccd 0.001 = 0x20c5 雖然答案是正確的,但我想要做的是保留6個字符的表示形式,所以我希望0.1 = 0x0ccccd和
0.001 = 0x0020c5。

  1. 我想一個可能的方法是十六進制結果轉換爲字符串,然後使用strlen檢查的位數,然後用適當的零拼接的結果。我用這種方法的問題是我不知道如何將十六進制結果存儲在變量中。
  2. 即使我將十六進制數字轉換爲字符串並找到要連接的零的數量,我想,該程序會有點笨重。有可能是一種更簡單的方式來實現我想要做的事情。我只是不知道如何。希望有人能向我展示前進的方向。我寫的程序如下。 (真){ float frac_no; std :: cout < <「輸入小數(0-1)或按0退出:」; std :: cin >> frac_no;
    if(!frac_no)break; }

    const int max_limit_24 = exp2(23); //最大值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」;;

    }

回答

0
#include <iomanip> 
int val = 0x20c5; 
std::cout << "0x" << std::setw(6) << std::hex << std::setfill('0') << val << '\n'; 

如果你只是需要它來對輸出的前導零。如果你想將它作爲一個字符串存儲,你可以使用std :: stringstream來代替std :: cout並從中獲取字符串。

+0

我剛剛試過你推薦的東西,它在名稱空間標識中顯示「沒有成員命名爲setw」。和「namespace std中沒有名爲setfill的成員」。你能告訴我什麼頭文件我需要使用以使上面的行有效。 –

+0

編輯包括#include –

+0

謝謝,這工作。出於好奇,你還記得所有的頭文件嗎? :)我幾乎不記得基本的。 –