Ruby/Rails syntax
  • Index
  • chap 1
  • chap 2
  • chap 3
  • chap 4
  • Enterprise Rails - big picture
  • Nokogiri
  • ActiveRecord - 進階功能
  • pack & unpack
  • performance
  • rails engine
  • jsonb / json / hstore
  • Deploy
  • Polymorphism/Polymorphic Associations
  • relationship
  • rvm / ENV
  • Auth
  • DB related
  • TODO N+1
  • SQL view
  • module
  • api + create-react-app
  • ONE_LINE
  • Delete & destroy association
Powered by GitBook
On this page
  • unpack = String#unpack
  • bit
  • String to ASCII Values
  • hex
  • count
  • pack = Array#pack
  • Binary File Parsing

Was this helpful?

pack & unpack

PreviousActiveRecord - 進階功能Nextperformance

Last updated 5 years ago

Was this helpful?

unpack = String#unpack

Endian = Byte Order

MSB, LSB = bit order

1 byte = 2 nibbles = 8bits

bit

C Ascii = 67 (2^0 + 2^1 + 2^6)

'C'.unpack('b*') # LSB
# => ["11000010"]

'C'.unpack('B*') # MSB
# => ["01000011"]

String to ASCII Values

C* = 8-bit unsigned integer

"hello".unpack('C*')
=> [104, 101, 108, 108, 111]

hex

104.to_s 16 = hex value of the string.

"hello".unpack('C*').map {|e| e.to_s 16}
=> ["68", "65", "6c", "6c", "6f"]

You can also do

> "hello".unpack('H*')
=> ["68656c6c6f"]
"hello".unpack('H*') # high nibble first
=> ["68656c6c6f"]

"hello".unpack('h*')# low nibble first
=> ["8656c6c6f6"]
6 8 # high nibble first
X
8 6 # low nibble first

count

> "hello".unpack('CC')
=> [104, 101]

> "hello".unpack('CCC')
=> [104, 101, 108]

> "hello".unpack('CCCCC')
=> [104, 101, 108, 108, 111]
"aa".unpack('b8B8') # mix MSB and LSB
=> ["10000110", "01100001"]

pack = Array#pack

pack = read the stored data.

[1000001].pack('C') # binary -> 8 bit unsigned integer
=> "A"

['1000001'].pack('b*')
=> "A"
['A'].pack('H') # hex -> Ascii
=> "\xA0" # no Ascii for A0
['a'].pack('H') 
=> "\xA0" # in hex, 'A' = 'a'
['a'].pack('h')
=> "\n" # in Ascii table, '\x0A' = new line

Binary File Parsing

or parse image

binary_data     = "\x05\x00\x68\x65\x6c\x6c\x6f"
length, message = binary_data.unpack("Sa*")

# [5, "hello"]
http://blog.bigbinary.com/2011/07/20/ruby-pack-unpack.html
http://www.blackbytes.info/2017/01/read-binary-data/?tl_inbound=1&tl_target_all=1&tl_form_type=1&tl_period_type=1