I'm trying to replicate this ruby script using JavaScript and Node.js:
$ ruby -e "STDOUT.write ['e13adbea5d743c30b8ea0edd0337b924c6bd0a78'].pack('H40')"
There was an earlier piece where I converted ['hello'].pack('Z*')
to Buffer.from('hello\0')
, but this other part is driving me insane.
I've found the source code for this in Ruby: https://github.com/ruby/ruby/blob/9e41a75255d15765648279629fd3134cae076398/pack.c#L426 but i don't understand C very well, let alone bit shifting in C.
I read through this Stack Exchange question and answer but still couldn't figure anything out (https://codereview.stackexchange.com/questions/3569/pack-and-unpack-bytes-to-strings)
Any insight here would be much appreciated.
Furthermore, the best answer here would be something that I could run with node -p
and pipe to hexdump -C
to get the exact same output of Ruby.
i.e.
$ ruby -e "STDOUT.write ['e13adbea5d743c30b8ea0edd0337b924c6bd0a78'].pack('H40')" | hexdump -C
00000000 e1 3a db ea 5d 74 3c 30 b8 ea 0e dd 03 37 b9 24 |.:..]t<0.....7.$|
00000010 c6 bd 0a 78 |...x|
00000014
The closes I got was with:
node -p "Buffer.from('e13adbea5d743c30b8ea0edd0337b924c6bd0a78', 'hex').toString('utf8')" | hexdump -C
00000000 ef bf bd 3a ef bf bd ef bf bd 5d 74 3c 30 ef bf |...:......]t<0..|
00000010 bd ef bf bd 0e ef bf bd 03 37 ef bf bd 24 c6 bd |.........7...$..|
00000020 0a 78 0a |.x.|
00000023