gpt4 book ai didi

ruby-on-rails - 我们如何在 ruby​​ 中将每个字节编码为两个十六进制字符?

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:31 25 4
gpt4 key购买 nike

我有一个十六进制数

hexMidAppId = '0001000000000002'

在node.js中,我们有一个库new Buffer(hexMidAppId, 'hex'),它给我的输出为

<Buffer 00 01 00 00 00 00 00 02>

现在我想在 ruby​​ 中得到相同的输出,但我在 ruby​​ 中找不到 Buffer 方法的任何等效方法。谁能帮我这个吗?

最佳答案

在 ruby​​ 中,您可以使用 String#unpackArray#pack对于这些以及许多其他的转换。

要将十六进制字符串更改为实际字节,您可以将其放入数组中并使用 Array#pack,如下所示:

 ['0001000000000002'].pack 'H*'
# => this will give: "\x00\x01\x00\x00\x00\x00\x00\x02"

您得到的是一个包含实际字节的字符串。您可以使用以下方法将其转换为字节数组:

 data = ['0001000000000002'].pack 'H*'
# => this will give: "\x00\x01\x00\x00\x00\x00\x00\x02"
data.bytes # => [0, 1, 0, 0, 0, 0, 0, 2]

附注

使用 Javascript 中的 Buffer 类,因为纯 Javascript 不适合二进制。

Pure JavaScript is Unicode friendly but not nice to binary data. When dealing with TCP streams or the file system, it's necessary to handle octet streams. Node has several strategies for manipulating, creating, and consuming octet streams.

Raw data is stored in instances of the Buffer class. A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized.

在 Ruby 中,可以使用 String 类或 Array 来存储二进制数据,so you will not find a designated "Buffer" class .

示例:

"\x00\x01\x02" # => A string with 3 bytes, using Hex notation (00, 01, 02)
"\x00\x01\x02".bytes # => [1,2,3] An array with 3 bytes.
[1,2,3].pack('C*') # => "\x00\x01\x02" Back to the string

您还可以将 pack 用于整数(16 位)、长整型(32 位)、 double (64 位)和其他数据类型:

[1024, 2].pack('i*') # => "\x00\x04\x00\x00\x02\x00\x00\x00"

关于ruby-on-rails - 我们如何在 ruby​​ 中将每个字节编码为两个十六进制字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31803296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com