如题
[code=ruby]
"\x01\x42".unpack('c*').map{|e|255-e}.pack 'c*'
#=> "\xFE\xBD"
[/code]
unpack 'c*' 字符串转变成为数组,每个元素都是一个整数,对应字节的asi编码
pack 'c*' 逆操作
不知有简洁一点的做法不
楼上的unpack/pack方法应该是比较好的了。要是用String#each_byte比较不functional,就不方便连续的调用了:
[code="ruby"]def invert_bytes(str)
s = ''
str.each_byte {|b| s << ~b}
s
end[/code]
对字节的每一位取反用255(0xFF)减或者直接取反都行,所以楼上的方法也可以写成
[code="ruby"]def invert_bytes(str)
str.unpack('c*').map {|b| ~b}.pack('c*')
end[/code]
啊,刚才手滑了……第一个是
[code="ruby"]def invert_bytes(str)
s = ''
str.each_byte {|b| s << '%c' % ~b}
s
end[/code]