web-dev-qa-db-ja.com

uint32_tから16進数を印刷する方法は?

私が取り組んでいるコードでは、タイプuint32_tの変数を16進数で出力し、パディングは0、最小長は8である必要があります。これまでに使用したコードは次のとおりです。

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

Read_Wordがタイプuint32_tを返す場合。 jx、llxなどの形式を使用しましたが無駄になりましたが、使用できる正しい形式はありますか?

編集:

問題は私が通過しているものにあることがわかりました。関数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);
5
Dave

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の場合、もう少し鈍くなります。 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

Cでは、inttypes.hの定数が言語文字列連結機能とともに使用され、必要な形式指定子が形成されることに注意してください。プリアンブルとしてゼロフィルと最小長のみを指定します。

7
WhozCraig

%jx +タイプキャスト

私はこれが正しいと思います:

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

int main(void) {
    uint32_t i = 0x123456;
    printf("%08jx\n", (uintmax_t)i);
    return 0;
}

コンパイルして実行します。

gcc -Wall -Wextra -pedantic -std=c99 main.c
./a.out

出力:

00123456

失敗したテストケースを作成できるかどうか教えてください。

Ubuntu 16.04、GCC6.4.0でテスト済み。