1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エンディアン(Endianness)とは何か?

Posted at

はじめに

エンディアン(Endianness)とは、コンピュータシステムが複数バイトで構成されるデータをメモリにどのように配置するかを表す概念です。この概念は、特にネットワークプログラミングやデータフォーマットの理解において非常に重要です。

エンディアンの種類

エンディアンには主に2種類あります。

ビッグエンディアン(Big-endian)

ビッグエンディアンでは、最上位バイト(Most Significant Byte, MSB)が最初に来ます。つまり、バイト順序は左から右に向かって降順に配置されます。

  • 例:32ビットの数値0x12345678をビッグエンディアンでメモリに配置すると、次のようになります:
アドレス:  0   1   2   3
内容:    12  34  56  78

リトルエンディアン(Little-endian)

リトルエンディアンでは、最下位バイト(Least Significant Byte, LSB)が最初に来ます。つまり、バイト順序は左から右に向かって昇順に配置されます。

  • 例:32ビットの数値0x12345678をリトルエンディアンでメモリに配置すると、次のようになります:
アドレス:  0   1   2   3
内容:    78  56  34  12

エンディアンの重要性

エンディアンは、特に異なるシステム間でデータをやり取りする際に重要です。例えば、ネットワークプロトコル(TCP/IPなど)では、通常ビッグエンディアン(ネットワークバイトオーダー)を使用します。これは、異なるアーキテクチャのマシン間でデータをやり取りする際に一貫性を保つためです。

エンディアン変換の必要性

ネットワークプログラミングでは、ホストバイトオーダー(システム固有のエンディアン)とネットワークバイトオーダー(ビッグエンディアン)の変換が必要です。

import socket

# ホストバイトオーダーからネットワークバイトオーダーへ変換(32ビット整数の場合)
host_order = 0x12345678
network_order = socket.htonl(host_order)
print(hex(network_order))  # 出力: 0x78563412

# ネットワークバイトオーダーからホストバイトオーダーへ変換
converted_back = socket.ntohl(network_order)
print(hex(converted_back))  # 出力: 0x12345678

Pythonでのエンディアン操作

Pythonでは、structモジュールを使用してバイナリデータのエンディアンを操作することができます。

ビッグエンディアンの例

import struct

# 32ビットの整数 0x12345678 をビッグエンディアンでパック
big_endian_data = struct.pack('>I', 0x12345678)
print(big_endian_data)  # 出力: b'\x12\x34\x56\x78'

# アンパックして確認
unpacked_value = struct.unpack('>I', big_endian_data)[0]
print(hex(unpacked_value))  # 出力: 0x12345678

リトルエンディアンの例

import struct

# 32ビットの整数 0x12345678 をリトルエンディアンでパック
little_endian_data = struct.pack('<I', 0x12345678)
print(little_endian_data)  # 出力: b'\x78\x56\x34\x12'

# アンパックして確認
unpacked_value = struct.unpack('<I', little_endian_data)[0]
print(hex(unpacked_value))  # 出力: 0x12345678
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?