설명서를보고 C 소스를 살펴 보았습니다. 왜 그들이 허용 된 기수를 2..36으로 제한했는지 알 수 없습니다. 아무도 몰라?Ruby의 FixNum # to_s 메소드가 2에서 36까지의 radix만을 허용하는 이유는 무엇입니까?
답변
다른 사람들이 지적했듯이 기수는 < 2입니다. 렌더링하기가 번거 롭습니다. [ '0'.. '9'] + [ 'a'.. 'z']보다 큰 기수에 사용할 문자가 무엇인지에 대한 일반적인 합의가 없기 때문에 표준 방법은 그 한계를 벗어난 기수를 지원하지 않습니다 .
사용자 정의 기수 표현을 정말로 원하면 숫자에 사용할 기호의 알파벳을 정의해야합니다. 여기에 당신에게 능력을 줄 작은 모듈이 있습니다.
module CustomRadix
# generate string representation of integer, using digits from custom alphabet
# [val] a value which can be cast to integer
# [digits] a string or array of strings representing the custom digits
def self.custom_radix val, digits
digits = digits.to_a unless digits.respond_to? :[]
radix = digits.length
raise ArgumentError, "radix must have at least two digits" if radix < 2
i = val.to_i
out = []
begin
rem = i % radix
i /= radix
out << digits[rem..rem]
end until i == 0
out.reverse.join
end
# can be used as mixin, eg class Integer; include CustomRadix; end
# 32.custom_radix('abcd') => "caa" (200 base 4) equiv to 32.to_s(4).tr('0123','abcd')
def custom_radix digits
CustomRadix.custom_radix self, digits
end
end
사용 예제 :
$ irb
>> require '~/custom_radix'
=> true
>> CustomRadix.custom_radix(12345,'0'..'9')
=> "12345"
>> CustomRadix.custom_radix(12345,'.-')
=> "--......---..-"
>> funny_hex_digits = ('0'..'9').to_a + ('u'..'z').to_a
=> ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "u", "v", "w", "x", "y", "z"]
>> CustomRadix.custom_radix(255, funny_hex_digits)
=> "zz"
>> class Integer; include CustomRadix; end
=> Integer
>> (2**63).custom_radix(funny_hex_digits)
=> "8000000000000000"
>> (2**64+2**63+2**62).custom_radix(funny_hex_digits)
=> "1w000000000000000"
>> base64_digits = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a << '+' << '/'
=> ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"]
>> 123456.custom_radix(base64_digits)
=> "eJA"
나는 루비에 대해 아무것도 모른다. 그러나 나는 10 진수와 26 개의 알파 자릿수가 있다는 것을 알고있다. 그게 36이야.
분명히 그럴 수도 있지만 대소 문자를 구별하면 46 자의 영숫자 문자가 있습니다. 실제로 46 개의 문자 세트 중 무작위로 31 개의 문자열을 생성하기를 원했고'31xinject ('') {| i | i << rand (46) .to_s (46)}'가 작동하지 않습니다. –
@sidewaysmilk 그러나 16 진수는 거의 보편적으로 대소 문자를 구별하지 않으며, 높은 기본에 대한 변경은 끔직하게 일치하지 않습니다. – delnan
대신에 base-64 인코딩을 사용하는 것이 좋습니다. – BlueMonkMN
어떻게베이스 1에 숫자를 렌더링하겠습니까? 37 번 기지에서 어떻게 숫자를 렌더링하겠습니까? 기수 300?
16 진수는 0..9와 A..F를 사용하는 것이 일반적입니다. 더 높은 기지에 알파벳을 계속 사용하는 것은 직관적이지만 36 점만받습니다. (더 많은 것을 본 적이없는 - 내가 본 적이없는 경우) 상위 기지의 용도는 거의 없으므로 그 이상의 것을위한 협약은 없습니다. 어쩌면 완전히 다른 짐승 인 기지 64를 제외하고, 하나의 기지에만 국한되고 몹시 오래되지는 않았습니다. 또한, gazillion 호환되지 않는 변종, 내 포인트를 강화.
기본 1의 경우 : 단항 계산이 있지만 컴퓨팅에서 덜 유용하고 매우 유용하지는 않으며 매우 쉽게 에뮬레이션 할 수 있습니다 (동일한 문자의 concat n
번). 게다가, 사람들은 아마도 그 캐릭터가 무엇에 있어야하는지에 대해 크게 다른 의견을 가지고있을 것입니다.
- 1. Ruby의 #tap 메소드가 위험합니까?
- 2. UIComponent의 encodeXxx 메소드가 FacesContext 매개 변수를 허용하는 이유는 무엇입니까?
- 3. ruby의 rand 메소드가 Range 객체를 받아들이겠습니까?
- 4. 루비의 Fixnum #/메소드가 다른 Fixnum에서 호출 될 때 왜 반올림됩니까?
- 5. addRequestHeader 메소드가 필요한 이유는 무엇입니까?
- 6. 각 메소드가 호출되는 이유는 무엇입니까?
- 7. ruby의 object_id 메소드가 메모리 위치를 참조합니까?
- 8. 하위 클래스의 루비에서 Fixnum
- 9. string + fixnum 추가가 강제 오류를 생성하는 이유는 무엇입니까?
- 10. Ruby가 FixNum n을 2n + 1로 해시하는 이유는 무엇입니까?
- 11. 컨트롤러 메소드가 2에서 검색 버튼 클릭
- 12. Ruby의 해시 방법이 달리 실행되는 이유는 무엇입니까?
- 13. Zend Framework 2에서 데이터베이스에 중복 항목을 허용하는 방법은 무엇입니까?
- 14. 게임 2에서 테스트를 실행할 수없는 이유는 무엇입니까?
- 15. 레이블에 고정 폭을 허용하는 이유는 무엇입니까?
- 16. JSON이 문자열 만 키로 허용하는 이유는 무엇입니까?
- 17. Task.Delay()가 무한 지연을 허용하는 이유는 무엇입니까?
- 18. Java가 크기 0의 배열을 허용하는 이유는 무엇입니까?
- 19. Java가 식별자에서 제어 문자를 허용하는 이유는 무엇입니까?
- 20. Pathname의 chdir 메소드가 폐기 된 이유는 무엇입니까?
- 21. 이 메소드가 두 번 호출되는 이유는 무엇입니까?
- 22. 대부분의 java.util.Date 메소드가 사용되지 않는 이유는 무엇입니까?
- 23. 내 메소드가 null 암호를 반환하는 이유는 무엇입니까?
- 24. JDOM의 getChild() 메소드가 null을 리턴하는 이유는 무엇입니까?
- 25. OpenGL에서 정수 메소드가 작동하지 않는 이유는 무엇입니까?
- 26. Java의 AbstractList의 removeRange() 메소드가 보호되는 이유는 무엇입니까?
- 27. JSON에 setXXX 메소드가 필요하지 않은 이유는 무엇입니까?
- 28. 테스트 메소드가 실행되지 않는 이유는 무엇입니까?
- 29. 제네릭 메소드가 작동하지 않는 이유는 무엇입니까?
- 30. 이 메소드가 IllegalMonitorStateException을 Throw하는 이유는 무엇입니까?
@muistooshort 자료 (1) 지금까지 집계 목록을 한 존재? 또는 테스트 주자 중 일부가 성공적인 테스트를 위해 생성 한 점을 계산합니까? 그 점에 관해서는, 아마도 기본'1/2'과 훨씬 더 미친 것들 (기본'phi' 누군가?)이있을 것입니다. – delnan