2015-02-25 5 views
1

У меня есть JRuby (на самом деле оболочка Apache HBase). У меня есть много строк, которые представляют байты, каждый символ имеет шестую цифру, по 2 символа на байт. Что-то вроде:Как преобразовать строку шестнадцатеричных цифр в строку с шестнадцатеричными байтами escapes в оболочке hbase (JRuby)

id = "faed31" 

Но мне нужна строка уцелевших символов:

=> "\xfa\xed1" 

Любое решение? Не удалось сделать Google и иметь очень общее впечатление о Ruby.

ответ

0

Вот код, который фактически решает все мои задачи, включая вывод, который хотел:

# Convert binary string to hex digits. 
def bin_to_hex(s) 
    s.each_byte.map { |b| b.to_s(16).rjust(2, '0') }.join 
end 

# Convers hex string to binary string. 
def hex_to_bin(s) 
    s.scan(/../).map { |x| x.hex.chr }.join 
end 

# HBase special 'convert and print' routine to get hex digits, process them and print. 
def print_hex_to_bin(s) 
    Kernel.print "\"" + Bytes.toStringBinary(s.scan(/../).map { |x| x.hex.chr }.join.to_java_bytes) + "\"\n" 
end 

Составлено в основном на основе http://anthonylewis.com/2011/02/09/to-hex-and-back-with-ruby/

Смежные вопросы