比如输入 'E' 这个字符, 也就是 69.chr 2进制是 0b0100_0101
"01000101"
[13] pry(main)> 'E'.ord .to_s(2) .rjust( 8, '0' )
=> "01000101"
0b0100 == 4
0b0101 == 5
如何得到 [4,5] 这2个数? 有什么好的写法?
共收到 18 条回复
直接写就可以了啊
<<H:4, L:4>> = <<"E">>.
{4, 5} = {H, L}.
想要 01000101
'E'.unpack 'B*'
想要 [4,5]
ord = 69
[ord >> 4, ord & 0xF]
如果楼主是想要 hex string
'E'.unpack 'H*' # "45"
'E'.unpack 'h*' # "54"
'E'.ord.to_s(16).chars.map &:to_i
再多问一下. 万一以后要 [3bit, 5bit ] 呢?
[54] pry(main)> a = 'E'.unpack( 'B*' )[0]
=> "01000101"
[56] pry(main)> a[0,3]
=> "010"
[57] pry(main)> a[3,5]
=> "00101"
那是Erlang吧
#12楼 @kenshin54 嗯, 搞定. 多谢
ord = 69
ord >> 5 #右移掉 5bit
ord & 0b11111 #5个1
#11楼 @kenshin54 不是说Ruby可以DSL的嘛