Я пытаюсь реализовать следующий код C++ в Ruby:
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
Проблема в том, что это не работает правильно для специальных символов, таких как «*» и других.
Любые идеи высоко ценятся.
*
? - person Esailija   schedule 18.12.2012char.hex
, так как тип символа может хранить только символы US-ASCII. - person Linuxios   schedule 18.12.2012