Ruby 中的 Nodejs 缓冲区相当于什么?

What is the equivalent of Nodejs Buffer in Ruby?

我知道在 Nodejs 中有一个 Buffer 模块:

import { Buffer } from "buffer/";

// node = ...
// labelSha = ...
Buffer.from(node + labelSha, "hex");


Ruby 中的等价物是什么?

谢谢

Ruby 字符串和数组是动态的,不是固定长度的

Ruby 的核心库或标准库中确实没有直接比较,但我想您可以创建自己的模拟。 Node.js Buffer 是固定长度的字节序列。根据这对您的用例意味着什么,您可以使用以下一项或多项:

访问存储的字节,但是 Ruby 中的 String 和 Array 对象都不是真正固定长度的,除非你冻结它们。然而,冻结的对象(对于大多数用途)是不可变的,所以这真的不是一回事。因此,基本上由您来截断、切片、按索引替换或以其他方式删除元素以保持“固定大小”。

如果您打算经常这样做,您可以使用 getter 或 setter 方法创建 String 或 Array 的子类,该方法每隔一段时间将实例变量的内容截断为您想要的大小您访问它的时间。这很可能是您最好的选择,尽管肯定有人已经编写了提供此功能的 gem。如果您不想自己实现,The Ruby Toolbox and RubyGems.org 是搜索提供固定大小或循环缓冲区实现的 gem 的最佳选择,但选项和质量会因它们的不同而有很大差异Ruby 的内置 类.

的一部分

谢谢大家!

花了2个小时,我也写了自己的实现版本:

  def nodejs_buffer_to_hex origin_string
    i = 0 
    result = []
    temp = ""
    loop do
      break if i == origin_string.length
      temp += origin_string[i]
      if i % 2 == 1
        result << temp
        temp = ""
      end 
      i += 1
    end 

    result = result.map do |e| 
      "0x#{e}".hex
    end 
    return result
  end 

和用法:

nodejs_buffer_to_hex "ce159cf3"  # => [206,21,156,243]