如何使用javascript对十六进制数字字符串进行编码?(正在复制ruby array.pack(';H';)

如何使用javascript对十六进制数字字符串进行编码?(正在复制ruby array.pack(';H';),javascript,node.js,ruby,bit-manipulation,Javascript,Node.js,Ruby,Bit Manipulation,我正在尝试使用JavaScript和Node.js复制此ruby脚本: $ruby-e“STDOUT.write['e13adbea5d743c30b8ea0edd0337b924c6bd0a78'].pack('H40')” 在前面的一篇文章中,我将['hello'].pack('Z*')转换为Buffer.from('hello\0'),但另一部分让我发疯 我在Ruby中找到了这方面的源代码:但我对C的理解不是很好,更不用说C中的位移位了 我通读了这个堆栈交换问题和答案,但仍然无法理解()

我正在尝试使用JavaScript和Node.js复制此ruby脚本:

$ruby-e“STDOUT.write['e13adbea5d743c30b8ea0edd0337b924c6bd0a78'].pack('H40')”
在前面的一篇文章中,我将
['hello'].pack('Z*')
转换为
Buffer.from('hello\0')
,但另一部分让我发疯

我在Ruby中找到了这方面的源代码:但我对C的理解不是很好,更不用说C中的位移位了

我通读了这个堆栈交换问题和答案,但仍然无法理解()

如果您有任何见解,我们将不胜感激

此外,这里最好的答案是我可以运行
node-p
并通过管道连接到
hextump-C
以获得完全相同的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我的解决方案是,我实际上已经在将十六进制字符串转换为原始二进制缓冲区,但我没有意识到,因为我没有正确打印出来

工作脚本是:

$ node -e "process.stdout.write(Buffer.from('e13adbea5d743c30b8ea0edd0337b924c6bd0a78', 'hex'))" | hexdump -C

这是一个充分的问题吗?“将十六进制字符串转换为原始二进制缓冲区”。如果是这样,那么(…,'hex')
中的
有什么不足之处?如果没有,那么(…,'hex')
中的
有什么不足之处呢?好问题,如何让node.js输出原始二进制缓冲区?可能吗?可能吧?也就是说,使用一个直接接受缓冲区的流方法(不接受到/来自字符串的转换)。哦,它实际上没有我想象的那么难:node-p“process.stdout.write(Buffer.from('e13adbea5d743c30b8ea0edd0337b924c6bd0a78','hex'))“| hextump-CThank you!我想我现在有一个答案了,需要用我的代码确认一下
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
$ node -e "process.stdout.write(Buffer.from('e13adbea5d743c30b8ea0edd0337b924c6bd0a78', 'hex'))" | hexdump -C