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

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

比如输入 '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 个数?有什么好的写法?

直接写就可以了啊

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

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