gpt4 book ai didi

c++ - 在将几行 ruby​​ 代码转换为 C++ 时需要帮助!

转载 作者:太空宇宙 更新时间:2023-11-03 18:01:02 24 4
gpt4 key购买 nike

我必须将以下代码转换为 Qt C++所以我需要了解这些行的用途。

这段代码中的@key是openssl生成的pem key 文件内容

key = KEY+@key.public_key.to_der
  1. 所以我认为这是将该 key 转换为 der 格式,然后将其与 KEY 结合。对吗?

  2. 这是做什么的? to_size(key.size)如您所见,该函数返回 [num].pack('V')。但我不知道它有什么作用?我的意思是 [num].pavck('V')。这是什么?

  3. 这是什么意思。 key.size 是key的strlen吗?

def write_crx
print "write crx..." if @verbose
key = KEY+@key.public_key.to_der
File.open(@crx, 'wb') do |file|
file << MAGIC
file << EXT_VERSION
file << to_sizet(key.size)
file << to_sizet(@sig.size)
file << key
file << @sig
File.open(@zip, 'rb') do |zip|
file << zip.read
end
end
puts "done at \"#{@crx}\"" if @verbose
end
def to_sizet num
return [num].pack('V')
end

好吧,我还有一个问题。上次忘了加。这条线是做什么的?

KEY = %w(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map{|s| s.hex}.pack('C*')

最佳答案

so i think this is converting that key to der format and then combining it with KEY. is it right?

是的。

whats does this do? to_sizet(key.size) As you can see the function returns [num].pack('V'). But i dont know wht does it do? I mean [num].pavck('V'). what is it?

好吧,看看关于 Array#pack 的文档说。使用 V 修饰符,它只是将数组转换为 32 位无符号整数类型的二进制表示。

And whats does this mean. key.size is it the strlen of key?

Ruby 文档再次提供帮助。 String#size确实是字符串长度。

what does this line do?

KEY = %w(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00)
.map{|s| s.hex}.pack('C*')

%(…) 定义一个数组,其中每个由空格分隔的条目都被视为一个单独的字符串。 %w(one two) is essentially a shorthand for ["one", "two"] .

之后,我们必须查找(再次在文档中)Array#mapString#hex 的含义。

map 只是对数组的每个元素应用一个操作,并用结果创建一个新数组。该操作是 s.hex – 即,将每个字符串解析为十六进制数。

结果再次打包,这次使用 C* 操作,文档告诉我们,该操作将数字转换为相应的(无符号)8 位字符代码。

总结:该行将十六进制值转换为由各自字符组成的字符串。

事后思考:您真的应该安装 Ruby 并使用交互式 Ruby 控制台 irb 玩一下。键入以上行已经很有帮助了:

$ irb
>> %w(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map{|s| s.hex}
=> [48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0]
>> %w(30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00).map{|s| s.hex}.pack('C*')
=> "0\201\2370\r\006\t*\206H\206\367\r\001\001\001\005\000\003\201\215\000"

关于c++ - 在将几行 ruby​​ 代码转换为 C++ 时需要帮助!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745991/

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