编码ruby 1.8.7字符串

时间:2012-12-18 16:30:07

标签: ruby encoding hex

我正在尝试在Ruby中实现以下C ++代码:

sprintf (tmp, "|%02x", Payload[i] & 0xFF);

基本上,有效载荷数据中其值不是US-ASCII代码表中的字母或数字代码的所有字节都被编码为三个字节:

| X1 X2

其中'|'是一个字节,代码值为'|'在US-ASCII代码表(0x7C)中,'X1'是字节代码的第一个十六进制数字,'X2'是字节代码的第二个十六进制数字。

到目前为止,我已编码:

payload.each_char do |char|
  if char.match(/^[[:alnum:]]$/) 
    encoded_string << char && next 
  end
  encoded_string << sprintf("|%02x", char.hex);  
end

问题是,对于像'*'和其他人这样的特殊符号,这不能正常工作。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:0)

我没有1.8.7进行测试,但这在1.9.3中有效,所有使用的方法都应该在1.8.7中:

payload.each_byte do |byte|
  if byte.chr.match(/^[[:alnum:]]$/) 
    encoded_string << byte.chr && next 
  end
  encoded_string << sprintf("|%02x", byte);  
end

"hello world***"的结果:

hello|20world|2a|2a|2a