Моя программа является декодером для двоичного протокола. Одним из полей в этом двоичном протоколе является кодированный String
. Каждый символ в String
можно распечатать и представляет собой целочисленное значение. В соответствии со спецификацией протокола я декодирования, интегральная величина представляет берется из следующей таблицы, где перечислены все возможные символы:Rubyist способ декодировать эту закодированную строку, предполагая инвариантную кодировку ASCII
Character Value
========= =====
0 0
1 1
2 2
3 3
[...]
: 10
; 11
< 12
= 13
[...]
B 18
Так, например, характер =
представляет собой составную 13
.
Мой код был первоначально используя ord
, чтобы получить код ASCII для символа, а затем вычитая 48
от того, как это:
def Decode(val)
val[0].ord - 48
end
... который прекрасно работает, если предположить, что val
состоит только из символов перечисленные в этой таблице (это проверено в другом месте).
Однако в another question, мне сказали, что:
Вы просите способ Руби использовать Ord, где его использование против путь рубин.
Мне кажется, что ord
это именно то, что мне нужно, поэтому я не понимаю, почему использование ord
здесь не Rubyist способ сделать то, что я пытаюсь сделать.
Так что мои вопросы:
Прежде всего, что такое Rubyist способ написать свою функцию выше? Secondary, Почему использует ord
здесь нерубистская практика?
Замечание о кодировании: этот протокол, который я декодирует, точно определяет, что эти строки закодированы в ASCII. Здесь нет никакой другой кодировки. Подобные протоколы чрезвычайно распространены в моей отрасли (товарные рынки &).
Я вижу. Код, относящийся к логике низкого уровня, возможно, должен использовать 'ord', но он не может быть частью Rubyistic кода. Это должна быть уродливая часть кода, которая должна быть скрыта в каталоге как оболочка/адаптер для вызова из основной логики в отдельном файле. Кстати, интеграл? Вероятно, вы имеете в виду целое число. – sawa
Если спецификация гарантирует, что строки всегда будут ASCII, вы можете использовать 'ord', без проблем. Почему это «не-рубиновый путь» - я не могу сказать. :) –
Цель всего кода была не ясна из информации, приведенной в вопросе, в то время, когда я прокомментировал. Было похоже, что OP просто пытался извлечь числа из строки, используя 'ord' вместо' to_i'. – sawa