Ruby [4bit,4bit] 这个怎么写比较好?

sevk · 2013年10月08日 · 最后由 simlegate 回复于 2013年10月08日 · 2535 次阅读

比如输入 '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"

#1楼 @bhuztez <<H:4, L:4>> 这2个小于号是什么语法,我怎么从来没见过啊?

'E'.ord.to_s(16).chars.map &:to_i

#2楼 @luikore

多谢,

'E'.unpack 'B*'  
[ord >> 4, ord & 0xF]

都不错, 学习了

再多问一下. 万一以后要 [3bit, 5bit ] 呢?

#7楼 @sevk

显然直接写就好了嘛

<<H:3, L:5>> = <<"E">>. 
{2, 5} = {H, L}.

#8楼 @bhuztez 这一定是哪个gem吧, gem名字是什么, 我去安装

[54] pry(main)> a = 'E'.unpack( 'B*' )[0]
=> "01000101"
[56] pry(main)> a[0,3]
=> "010"
[57] pry(main)> a[3,5]
=> "00101"

那是Erlang吧

#10楼 @sevk 按照 @luikore 大的提示,应该是

ord = 69
[ord >> 5, ord & 0x1F]

#12楼 @kenshin54 嗯, 搞定. 多谢

ord = 69
ord >> 5  #右移掉 5bit
ord & 0b11111  #5个1

😄

#11楼 @kenshin54 不是说Ruby可以DSL的嘛

#16楼 @bhuztez 3行代码就搞定了,没必要 DSL 了

靠,你们在讨论什么啊~? @sevk @luikore

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册