53

uint16_tとuint32_tの値を出力しようとしていますが、目的の出力が得られません。

#include <stdio.h>
#include <netinet/in.h>

int main()
{
    uint32_t a = 12, a1;
    uint16_t b = 1, b1;
    a1 = htonl(a);
    printf("%d---------%d", a1);
    b1 = htons(b);
    printf("\n%d-----%d", b, b1);
    return 0;
}

私も使用しました

 printf("%"PRIu32, a);

これはエラーを示しています。

これらの値を印刷するにはどうすればよいですか?また、必要な出力は何になりますか?

4

2 に答える 2

76

コンパイラが C99 に準拠している場合、型とその兄弟にinttypes.h気の利いた新しい書式指定子がすべて必要な場合は、含める必要があります。これ正しい (つまり、移植可能な) 方法です。サイズが思ったものと違う場合や、標準のものを使用しないでください。intN_t%d%u

これには、一連の呼び出しstdint.hに使用できるマクロなど、他のかなりのものが含まれ、拡張されています。printf/scanfこれは、ISO C99 標準のセクション 7.8 でカバーされています。

たとえば、次のプログラムです。

#include <stdio.h>
#include <inttypes.h>
int main (void) {
    uint32_t a=1234;
    uint16_t b=5678;
    printf("%" PRIu32 "\n",a);
    printf("%" PRIu16 "\n",b);
    return 0;
}

出力:

1234
5678
于 2012-08-25T08:40:58.477 に答える