2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rickyアドカレ2024Advent Calendar 2024

Day 1

elixirのバイナリとちょっとだけ仲良くなる

Posted at

想定読者
バイナリについて知らない方
elixirでバイナリってどう扱うのか知りたい方

知識編

バイナリとは?

コンピュータはすべての情報を2進数の「0」と「1」が並んだビット列として表現する。このうち、何らかの文字コード規格に基づいて文字を表すデータを「テキストデータ」(テキスト形式)、そうでないものを「バイナリデータ」(バイナリ形式)と分類

バイナリ形式のデータの例としては画像や音声、動画などを記録したメディアデータ、実行可能形式のコンピュータプログラム(オブジェクトコード/バイナリコード)、圧縮データ、暗号データなど

バイナリを扱う経験が乏しいので想像になるが暗号データや圧縮データの取り扱いの際に重要視される?
(詳しい方がいたらコメントででも教えていただけるととても助かります。)

実践編

バイナリをelixirで操ってみます
elixirはインストール済みと想定し、iexを実行しシェルを立ち上げます

iex

is_binary

バイナリかどうかを調べてくれる関数

iex>is_binary("hello")
true

iex>is_binary(2)
false

"hello"は文字列だがバイナリとして処理されるが、2はバイナリとして処理されないのが確認できる

byte_size

バイトサイズを調べてくれる関数

iex> byte_size("ほげほげ")
12
iex> byte_size("hogehoge")
8

日本語の"ほげほげ"は4文字だがバイトサイズだと12文字換算となる
これはひらがなのコードポイントが大きいため1バイトで処理されていないためと考えられる
対して"hogehoge"は8文字だがバイトサイズ換算だと8文字換算となる
コードポイントが1バイト(0から255)でおさまるためだと考えられる

?

?と文字を入れることでコードポイントの特定ができる
一文字ずつしか使えないことに注意する

iex(5)> ?ほげほげ
** (SyntaxError) invalid syntax found on iex:5:3:
    error: syntax error before: 'げほげ'
    
  5  ?ほげほげ
       ^
    
    └─ iex:5:3
    (iex 1.17.3) lib/iex/evaluator.ex:295: IEx.Evaluator.parse_eval_inspect/4
    (iex 1.17.3) lib/iex/evaluator.ex:187: IEx.Evaluator.loop/1
    (iex 1.17.3) lib/iex/evaluator.ex:32: IEx.Evaluator.init/5
    (stdlib 6.1.2) proc_lib.erl:329: :proc_lib.init_p_do_apply/3
iex(5)> ?ほ
12411
iex(6)> ?げ
12370
iex(7)> ?h
104
iex(8)> ?o
111
iex(9)> ?g
103
iex(10)> ?e
101

先ほどのバイトサイズでの予想が合致しているのがわかる

疑問点
文字列は知識編で調べたテキストデータではないのか?
テキストデータとバイナリデータの切り分けがうまくできていない
後日判明し次第追記を行う

参考サイト

2
1
2

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?