LoginSignup
72
70

More than 5 years have passed since last update.

16進文字列と文字列の変換

Last updated at Posted at 2016-01-27

Python

文字列 => 16進文字列

binasciiモジュールでバイト列を16進文字列に変換することができる。
ユニコード文字列の場合はエンコードしてから変換する。

Python2/Python3
import binascii
binascii.hexlify(b'Hello') # => b'48656c6c6f'
binascii.b2a_hex(b'Hello') # => b'48656c6c6f'
binascii.hexlify(u'こんにちは'.encode('utf-8')) # => b'e38193e38293e381abe381a1e381af'
binascii.b2a_hex(u'こんにちは'.encode('utf-8')) # => b'e38193e38293e381abe381a1e381af'

codecsモジュールを使うこともできる。

Python2/Python3
import codecs
codecs.encode(b'Hello', 'hex_codec') # => b'48656c6c6f'
codecs.encode(u'こんにちは'.encode('utf-8'), 'hex_codec') # => b'e38193e38293e381abe381a1e381af'

Python2ではstr.encodeで変換することもできる。

Python2のみ
'Hello'.encode('hex') # => '48656c6c6f'

16進文字列 => 文字列

binasciiモジュールで16進文字列をバイト列に変換することができる。
ユニコードにする場合は結果をデコードする。

Python2/Python3
import binascii
binascii.unhexlify(b'48656c6c6f') # => b'Hello'
binascii.a2b_hex(b'48656c6c6f')   # => b'Hello'
binascii.unhexlify(b'e38193e38293e381abe381a1e381af').decode('utf-8') # => 'こんにちは'
binascii.a2b_hex(b'e38193e38293e381abe381a1e381af').decode('utf-8') # => 'こんにちは'

codecsモジュールを使うこともできる。

Python2/Python3
import codecs
codecs.decode(b'48656c6c6f', 'hex_codec') # => b'Hello'
codecs.decode(b'e38193e38293e381abe381a1e381af', 'hex_codec').decode('utf-8') # => 'こんにちは'

Python2ではstr.decodeで変換することもできる。

Python2のみ
'48656c6c6f'.decode('hex') # => 'Hello'

Ruby

文字列 => 16進文字列

String#unpack を使って文字列を16進文字列に変換することができる。

'Hello'.unpack('H*') # => ["48656c6c6f"]
'こんにちは'.unpack('H*') # => ["e38193e38293e381abe381a1e381af"]

16進文字列 => 文字列

Array#packを使って16進文字列を文字列に変換することができる。
必要に応じてString#force_encodingで文字コード情報を変更する。

['48656c6c6f'].pack('H*') # => "Hello"
['e38193e38293e381abe381a1e381af'].pack('H*').force_encoding('utf-8') # => "こんにちは"

Bash

文字列 => 16進文字列

xxdで文字列を16進文字列に変換できる。

echo -n Hello | xxd -p # => 48656c6c6f
echo -n こんにちは | xxd -p # => e38193e38293e381abe381a1e381af

16進文字列 => 文字列

xxdで16進文字列を文字列に変換できる。

echo -n 48656c6c6f | xxd -r -p # => Hello
echo -n e38193e38293e381abe381a1e381af | xxd -r -p # => こんにちは

MySQL

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.1.4 16 進数リテラル

文字列 => 16進文字列

SELECT HEX('Hello');
-- 48656C6C6F

SELECT HEX("こんにちは")
-- E38193E38293E381ABE381A1E381AF

16進文字列 => 文字列

SELECT x'48656C6C6F';
-- Hello

SELECT x'E38193E38293E381ABE381A1E381AF'
-- こんにちは
72
70
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
72
70