如何使用javascript对十六进制数字字符串进行编码?(正在复制ruby array.pack(';H';)
我正在尝试使用JavaScript和Node.js复制此ruby脚本:如何使用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中的位移位了 我通读了这个堆栈交换问题和答案,但仍然无法理解()
$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