Cでwriteシステムコールを使ってint型の数値を数字(16進数)に変換して表示する

NASMを勉強していて、NASMだと数値を数字に変換して画面に表示させるのが結構難しいのだということを知って、Cで同じようなことをやってみた。

#include <unistd.h>

#define DIGITS_OF_INT (sizeof(int) * 2)

char hex_chars[] = "0123456789ABCDEF";

void print_int(int n) {
  char hex[DIGITS_OF_INT + 1];
  int i;

  // 16進数1桁の数値(4ビット)を、下の桁から順番に、
  // hex_chars[]を使って数字に変換して、hex配列に入れる
  for (i = 0; i < DIGITS_OF_INT; i++) {
    hex[DIGITS_OF_INT - 1 - i] = hex_chars[n >> (i * 4) & 0x0F];
  }
  hex[DIGITS_OF_INT] = '\n';
  write(1, hex, sizeof(hex));
}

int main() {
  int a = 0x02468ACE;

  print_int(a);

  return 0;
}