Hex string to bytestring

I have strings of this form: “0x0253000c”

These are supposed to represent four hex values. I want a string each of
whose “characters” (bytes) is one of those hex values, in order, like
this: “\002S\000\f”

I can transform the given string like this:

s = “0x0253000c”
output = “”
s = s[2…-1]
s.split(//).each_slice(2) do |ss|
output << ss.join.hex.chr
end
p output # => “\002S\000\f”

Great, but this seems idiotic. There must be some simple neat way that
I’m not seeing. Could you tell me what it is? Thx - m.

On Sun, Jul 22, 2012 at 10:42 AM, Matt N. [email protected] wrote:

s = “0x0253000c”
output = “”
s = s[2…-1]
s.split(//).each_slice(2) do |ss|
output << ss.join.hex.chr
end
p output # => “\002S\000\f”

Great, but this seems idiotic.

well, i dont find that “idiotic” so to speak…
but try this eg,

[“0253000C”].pack “H*”
=> “\x02S\x00\f”

kind regards -botp

botp [email protected] wrote:

well, i dont find that “idiotic” so to speak…
but try this eg,

[“0253000C”].pack “H*”
=> “\x02S\x00\f”

Perfect; I had tried unpack but not pack. So this will work for the
strings I am getting:

output = [s[2…-1]].pack(“H*”)

Thanks! m.