我正在尝试在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
问题是,对于像'*'和其他人这样的特殊符号,这不能正常工作。
非常感谢任何想法。
答案 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