Help us understand the problem. What is going on with this article?

C99のint32_t型などをprintfに渡す方法

More than 1 year has passed since last update.

C99からサイズ固定の整数型が定義できるようになったわけですが、そのあたりの整理。

前提

Cは伝統的にintlongが何バイトかの保証がありません1。これらの整数型に対してはCPUアーキテクチャごとに最適なサイズが割り振られるので、Cプログラマはintが何バイトだろうと動くコードを書かねばなりません2

とはいえサイズを明示したいこともあるよね、ということでC99からサイズ固定の型が登場しました。

  • int8_t
  • int16_t
  • int32_t
  • int64_t
  • uint8_t
  • uint16_t
  • uint32_t
  • uint64_t

符号あり・符号なしの8,16,32,64bitの整数型が明示的に使えます。やりましたね!

これらの型は<inttypes.h>で定義されています。

printfで使いたい

これらサイズ固定の整数型をprintfで使いたいときのために、適切な指示子に展開するマクロが存在します。

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

int main(void) {
    int32_t i = 32;
    printf("%"PRIx32"\n", i); // 20
    return 0;
}

普段なら%xと書くはずのところで、マクロPRIx32を利用しています。このうちxの部分は普段の指示子と同様d(符号あり10進)、Xおよびx(16進)、o(8進)、u(符号なし10進)が利用できます。最後の数字は整数型のサイズを指定します。

参考URL


  1. Cの仕様上、char <= short <= int <= long <= long longというサイズの関係が成り立つ必要があるのと、型ごとの最低サイズが決められている(char 8bit, short 16bit, int 16bit, long 32bit, long long 64bit)という2点の縛りはあります。 

  2. 実際には対象アーキテクチャを絞って書かれるCソースコードの方が多いと思います、念のため 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした