Как заменить старший бит для каждого символа в текстовом файле, используя Ruby? - PullRequest
1 голос
/ 09 декабря 2011

Мне нужно конвертировать исходные файлы из старой системы CAN-8 в / из стандартного ASCII.

Файлы CAN-8 имеют каждый байт со старшим битом (0x80).

Так что мне нужно сделать что-то вроде:

f=File.new
can8=f.read

... сделать что-нибудь с переменной can8

Когда я отображаю переменную can8, она выглядит как "\xC1\xC2\xC3", мне нужно преобразовать ее в "ABC" ("\x41\x42\x43")

Mike

Ответы [ 2 ]

4 голосов
/ 09 декабря 2011

Вот один из способов сделать это:

original_string = "\xC1\xC2\xC3"
converted_string = original_string.bytes.collect { |b| (b & 0x7f).chr }.join

Вы не указали версию Ruby, поэтому я предполагаю, что вы используете 1.9 или более позднюю версию.

0 голосов
/ 09 декабря 2011

Кажется, что выполняет следующий маленький скрипт:

File.open("/etc/passwd").each_byte { |char|
    print (char & 0x7F).chr()
}

char & 0x7F отключает старший бит, а chr() превращает число обратно в символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...