gpt4 book ai didi

Ruby 的 String#hex 混淆

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:01 25 4
gpt4 key购买 nike

我发现 Ruby 中的 String#hex 没有为给定的字符返回正确的十六进制值很奇怪。我可能误解了这个方法,但举个例子:

'a'.hex
=> 10

而“a”的正确十六进制值是 61:

'a'.unpack('H*')
=> 61

我错过了什么吗?什么是十六进制?任何提示表示赞赏!

谢谢

最佳答案

String#hex 不会为您提供字符的 ASCII 索引,它用于将 base-16 数字(hexadecimal)从字符串转换为整数:

% ri String\#hex
String#hex

(from ruby site)
------------------------------------------------------------------------------
str.hex -> integer


------------------------------------------------------------------------------

Treats leading characters from str as a string of hexadecimal digits
(with an optional sign and an optional 0x) and returns the
corresponding number. Zero is returned on error.

"0x0a".hex #=> 10
"-1234".hex #=> -4660
"0".hex #=> 0
"wombat".hex #=> 0

所以它使用法线贴图:

'0'.hex #=> 0
'1'.hex #=> 1
...
'9'.hex #=> 9
'a'.hex #=> 10 == 0xA
'b'.hex #=> 11
...
'f'.hex #=> 15 == 0xF == 0x0F
'10'.hex #=> 16 == 0x10
'11'.hex #=> 17 == 0x11
...
'ff'.hex #=> 255 == 0xFF

在使用 base 16 时,它与 String#to_i 非常相似:

'0xff'.to_i(16) #=> 255
'FF'.to_i(16) #=> 255
'-FF'.to_i(16) #=> -255

来自文档:

% ri String\#to_i
String#to_i

(from ruby site)
------------------------------------------------------------------------------
str.to_i(base=10) -> integer


------------------------------------------------------------------------------

Returns the result of interpreting leading characters in str as an
integer base base (between 2 and 36). Extraneous characters past the
end of a valid number are ignored. If there is not a valid number at the start
of str, 0 is returned. This method never raises an exception
when base is valid.

"12345".to_i #=> 12345
"99 red balloons".to_i #=> 99
"0a".to_i #=> 0
"0a".to_i(16) #=> 10
"hello".to_i #=> 0
"1100101".to_i(2) #=> 101
"1100101".to_i(8) #=> 294977
"1100101".to_i(10) #=> 1100101
"1100101".to_i(16) #=> 17826049

关于Ruby 的 String#hex 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605689/

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