0

我正在尝试在 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

问题是,这对于“*”等特殊符号不能正常工作。

任何想法都非常感谢。

4

1 回答 1

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
于 2012-12-18T17:21:05.030 回答