2017-03-26 5 views
1

コードは、私はこれまでのところ、これを行うために使用されている0のパディングと最小長さ8コードと、進タイプuint32_tの変数を印刷することが必要である。uint32_tから16進数を出力する方法は?私が取り組んできた

printf("%08lx\n",read_word(address)); 

ここで、read_wordはuint32_t型を返します。 jx、llxなどのフォーマットは使用できませんでしたが、使用できる正しいフォーマットはありますか?

EDIT:

は、問題は、私が合格しています何である私を発見しました。関数read_wordは、uint32_tベクトルから値を返します。これは、ヘクスを出しているときに問題を引き起こす問題であるようです。これは参照/値の問題によるものですか?修正は何ですか?

read_word機能:

uint32_t memory::read_word (uint32_t address) { 
    if(address>(maxWord)){ 
     return 0; 
    } 

    return mem[address]; 

} 

MEM減速:

std::vector<uint32_t> mem=decltype(mem)(1024,0); 
+0

[この ''ヘッダーファイルの参考文献](http://en.cppreference.com/w/c/types/integer)を参考にしてください。最後に[フォーマットマクロ](http://en.cppreference.com/w/c/types/integer#Format_macro_constants)を確認してください。 –

+0

@Someprogrammerdudeありがとうございます。ドキュメントを見て、動作させることができるかどうかを確認します。PRIx32をパディングと一緒に使用する方法がわからない – Dave

+0

タイプを指定するだけです。変わりはない。 –

答えて

4

、塗りと幅の両方マニピュレータ乱用する必要があり、C++でこれを行うには:

#include <iostream> 
#include <iomanip> 
#include <cstdint> 

int main() 
{ 
    uint32_t myInt = 123456; 
    std::cout << std::setfill('0') << std::setw(8) << std::hex << myInt << '\n'; 
} 

出力を

0001e240 

Cでは、少し鈍いです。あなたはCで、inttypes.hから定数が必要な書式指定子を形成するために、言語文字列の連結機能で使用されていることをinttypes.h

#include <stdio.h> 
#include <stdint.h> 
#include <inttypes.h> 


int main() 
{ 
    uint32_t myInt = 123456; 
    printf("%08" PRIx32 "\n", myInt); 
    return 0; 
} 

出力

0001e240 

注意を使用しています。あなたはプリアンブルとしてゼロ充填と最小長のみを提供します。

+0

'printf("%08x \ n "、value);' 'uint32_t value = 0xabcd;'、 'stdio.h'と' stdint.h'のみがインクルードされています。 –

+0

C++版の書式設定では、出力がまだ10進数で出てきているようです。例えば。 read_wordが10の値(uint32_t型)を返し、C++メソッドで使用されると、 '00000010'が出力されます。残念ながら '0000000a'ではありません。 'myInt'の代わりにcoutに定数を設定すると、それはうまくいくので、おそらく戻り値に問題がありますか? – Dave

+0

マクロを持っていない任意の型に対してうまくいかない醜い解決策は、 'printf("%08jx "、(uintmax_t)value);' –