Ruby에서 정수를 16 진 문자열로 변환


206

Ruby의 정수를 16 진수로 변환하는 방법이 있습니까?

반대와 같은 것 String#to_i:

"0A".to_i(16) #=>10

아마도 :

"0A".hex #=>10

나는 내 자신의 롤링 방법을 알고 있지만 내장 Ruby 기능을 사용하는 것이 더 효율적일 것입니다.

답변:


325

to_s10이 아닌 다른 기초 를 줄 수 있습니다 :

10.to_s(16)  #=> "a"

루비 2.4에주의 FixNum하고 BigNum에 통합 된 Integer클래스입니다. 이전 루비를 사용하는 경우 FixNum #to_sBigNum # 의 문서를 확인하십시오 .to_s


4
그것은 내가 찾은 대답이지만 링크 된 페이지에 문서화되어 있지 않습니다 str.to_s => str은 매개 변수를 허용하지 않는 것으로 지정되었으며 "수신기를 반환합니다." 유일한 문서이지만, 작동하는 것 같습니다
Matt Haughton

2
해당 문자열에 대한 복사 붙여 넣기 실수에 대해 죄송합니다. 문자열에서 to_s는 인수를 취하지 않지만 Fixnum에서는 수행합니다.)
Jean

3
아, 나는 Integer에서 .to_s 메소드를 찾고 있는데 찾지 못했습니다. 나뿐만 아니라 Fixnum이라는 다음에서 살펴 보겠습니다
매트 Haughton

1
원래 숫자가 Fixnum의 인스턴스인지 확인하십시오. Float는 예외를 처리합니다.
lee

88

어떻게 사용에 대한 %/를 sprintf:

i = 20
"%x" % i  #=> "14"

15
이것을 보여 주셔서 감사합니다. '0'이 앞에 붙은 고정 길이 문자열을 얻을 수있는 것이 필요했습니다. 예 : "% 02X"10 % # => "0A"
아론 Hinni

42
그리고 다른 루비 초보자를 위해 : "#%02x%02x%02x" % [255, 0, 10] #=> "#ff000a"-여러 인수를 보내는 방법을 알아 냈습니다.
ANeves

1
이것은 매우 멋진 루비 스 니펫입니다!
OzBandit

4
@TomD %는 sprintf 형식에 대한 속기를 효과적으로 제공하는 String 메소드입니다 (내부 호출도 동일 함). 그것은 String 클래스의 문서화를 참조 ruby-doc.org/core-1.9.3/String.html#method-i-25
tardate

2
덜 중복 :[255, 0, 10].map{|x| '%02x'%x}.join
Rok Kralj

78

요약:

p 10.to_s(16) #=> "a"
p "%x" % 10 #=> "a"
p "%02X" % 10 #=> "0A"
p sprintf("%02X", 10) #=> "0A"
p "#%02X%02X%02X" % [255, 0, 10] #=> "#FF000A"

자릿수 형식에 감사드립니다. 그것에 대해 잊었다 :)
onetwopunch

내 하루를 구했다. 멋진 RGB 변환
Tim Kretschmer


4

음수의 형식을 선호하는 경우를 대비하여 :

p "%x" % -1   #=> "..f"
p -1.to_s(16) #=> "-1"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.