将字符串/未知格式转换为整数

时间:2014-03-04 11:22:08

标签: ruby-on-rails ruby openssl type-conversion

我需要将此OpenSSL::PKey::DH#compute_keyaString类型)转换为整数(documentation)。这些是我通过compute_key检查格式输出的测试。

...
...
shared_key = dh1.compute_key(public_key)
puts "1"
puts shared_key
puts "2"
puts shared_key.to_s
puts "3"
puts shared_key.inspect
puts "4"
puts shared_key.to_yaml

这些输出:

1
���`���,�L@�9�������Q���?�J����
2
���`���,�L@�9�������Q���?�J����
3
"\xD2\xBD\xBA`\xBC\xB1\xA6\x11,\xE9L@\x8C9\xA9\xAF\x88\xFD\x8F\xD9\x92Q\xE9\x93\x92?\xBCJ\xFB\xD2\xAC\xEE"
4
--- !binary |-
  0r26YLyxphEs6UxAjDmpr4j9j9mSUemTkj+8SvvSrO4=

我期待一个整数值

 95320918630576230557892713337132753026878147296634144208600768328265758846190

如果格式正确。我猜测首先将compute_key输出的整个字符串/数据转换为二进制,然后转换为整数。但我不太确定这是否是正确的方法。我也试过String::unpack,但它没有给我预期的格式(或者我unpack的输入参数可能不正确)。请帮忙。

2 个答案:

答案 0 :(得分:1)

好的,我已经设法得到这个号码,但是我不知道它为什么会这样:

步骤1.获取字符串的二进制表示形式:

shared_key.unpack('B*').first

步骤2.将其转换为整数:

shared_key.unpack('B*').first.to_i(2)

#=>  95320918630576230557892713337132753026878147296634144208600768328265758846190 

答案 1 :(得分:0)

尝试以下

shared_key.encode( "UTF-8", "binary", :invalid => :replace, :undef => :replace).unpack("B*").first.to_i(2)