Ruby에서 chr ()의 반대는 무엇입니까?
많은 언어에는 숫자와 문자 값 사이를 변환하는 함수 chr()
및 의 쌍이 ord()
있습니다. 일부 언어에서는 ord()
이라고 asc()
합니다.
Ruby에는 Integer#chr
, 이는 훌륭하게 작동합니다.
>> 65.chr
A
그럴 수 있지. 하지만 어떻게 다른 길로 가나 요?
"A".each_byte do |byte|
puts byte
end
인쇄물:
65
그리고 그것은 내가 원하는 것에 매우 가깝습니다. 하지만 나는 루프를 피하는 편이 낫다 const
. .NET을 선언 할 때 읽을 수있을만큼 짧은 것을 찾고있다 .
String # ord가 1.9에 존재하지 않았다면 2.0에 존재합니다.
"A".ord #=> 65
1.8 시리즈까지의 Ruby에서 다음은 모두 65 (ASCII의 경우)를 생성합니다.
puts ?A
'A'[0]
Ruby 1.9에서 동작이 변경되었으며, 위의 두 가지 모두 대신 "A"를 생성합니다. Ruby 1.9에서이를 수행하는 올바른 방법은 다음과 같습니다.
'A'[0].ord
불행히도이 ord
메서드는 Ruby 1.8에 없습니다.
시험:
'A'.unpack('c')
dylanfm 및 AShelly의 댓글을 +1하고 싶지만 [0]을 추가합니다.
'A'.unpack('C')[0]
unpack 호출은 단일 정수를 포함하는 Array를 반환하며, 정수가 필요한 경우 항상 허용되지는 않습니다.
$ 루비 -e 'printf ( "0x % 02X \ n", "A".unpack ( "C"))' -e : 1 : in`printf ': 배열을 정수로 변환 할 수 없습니다 (TypeError). -e : 1에서 $ 루비 -e 'printf ( "0x % 02X \ n", "A".unpack ( "C") [0])' 0x41 $
Ruby 1.8.1, 1.8.7 및 1.9.2에서 작동하는 코드를 작성하려고합니다.
unpack ( "c")는 나에게 -1을 제공하고 ord ()는 나에게 255를 제공하기 때문에 C를 전달하여 대문자로 풀도록 편집했습니다 (C의 문자가 서명 된 플랫폼에서 실행 중임에도 불구하고).
RFC를 통해 Stringprep의 순수한 Ruby 버전을 모으는 동안 이것을 발견했습니다.
chr
[0,255] 외부 에서 실패 한다는 점에주의하십시오 . 대신 1.9.x-2.1.x 휴대용 대체품을 사용하십시오.
[22] pry(main)> "\u0221".ord.chr
RangeError: 545 out of char range
from (pry):2:in 'chr'
[23] pry(main)> x = "\u0221".unpack('U')[0]
=> 545
[24] pry(main)> [x].pack('U')
=> "ȡ"
[25] pry(main)>
또한 문자열에 문자가 있고 루프없이 디코딩하려는 경우 :
puts 'Az'[0]
=> 65
puts 'Az'[1]
=> 122
어때
? A
배열에서 값을 가져와도 괜찮다면 다음을 사용할 수 있습니다. "A".bytes
다음을 가질 수 있습니다.
65.chr.ord
'a'.ord.chr
1.8.6 및 1.9.3에 대한 코드를 작성 중이며 두 환경 모두에서 작동하는 이러한 솔루션을 얻을 수 없습니다.
그러나 다른 솔루션을 발견했습니다. http://smajnr.net/2009/12/ruby-1-8-nomethoderror-undefined-method-ord-for-string.html
그것은 나에게도 효과가 없었지만 내 용도에 맞게 조정했습니다.
unless "".respond_to?(:ord)
class Fixnum
def ord
return self
end
end
end
그렇게하면 다음이 두 환경에서 모두 작동합니다.
'A'[0].ord
참고URL : https://stackoverflow.com/questions/308749/whats-the-opposite-of-chr-in-ruby
'Programing' 카테고리의 다른 글
React Native의 iOS 시작 화면 (0) | 2020.08.24 |
---|---|
MySQL에서 두 개의 단일 열 인덱스 대 하나의 두 열 인덱스? (0) | 2020.08.24 |
.axd 파일이란 무엇입니까? (0) | 2020.08.24 |
문자열에 10 자 중 하나가 포함되어 있는지 확인 (0) | 2020.08.23 |
압축을 풀지 않고 Unix .tar.gz 파일이 유효한 파일인지 확인하는 방법은 무엇입니까? (0) | 2020.08.23 |