2013-10-16 5 views
0

정수 (예 : x=20)가 있으면 이스케이프 된 8 진수 문자가 들어있는 문자열로 변환하고 싶습니다. 나는. ...int를 이스케이프 된 8 진수 문자로 변환

x=20 

# y = ... Some magic 

p y # => "\024" 

내가 얻을 관리했습니다 가장 가까운 사용하여 : 그러나

x.to_s(8) # => "24" 

, 나는 완전히 탈출 진수 문자로 문자열을 변환하는 방법에 stumpted 해요! 어떤 아이디어, 인터넷?

+0

' "\ 024".b'는''\ x14 "'로 표시됩니다. 당신은 무엇을하려합니까? – Stefan

+0

자, 그럼 20을 "\ x14"로 변환 할 수 있습니까? 다시, 나는 그것을 단지 "14"로 변환하는 방법을 안다. –

+0

그리고 일부 저수준 패킷 조작을 시도하고 있는데, 이스케이프 된 8 진수 값으로 특정 필드를 입력해야합니다. –

답변

1

그냥 숫자의 형식을 Kernel#sprintf를 사용합니다. 이

x = 20 
y = sprintf('\%03o', x) 

puts y 

출력 업데이트

\024 

처럼

아마 내가 당신을 오해. 주어진 코드 포인트를 가진 캐릭터를 원하면 Integer#chr을 사용하면됩니다. 만약 출력 파싱 문자열 루비 P 2- 슬래시 볼 것 Y를 표시 P를 사용하는 경우이

x = 20 
y = x.chr 

p y 

출력

"\x14" 
0

당신은 Array#pack을 사용할 수

[20].pack("C") #=> "\x14" 
+0

'pack'과'unpack'을 사용하여'Integer # chr'과'String # split'과 같은 맞춤 메쏘드의 기능을 에뮬레이션하는 것은 단지 비뚤어집니다. – Borodin

+0

OP가 "낮은 레벨"조작을 원하기 때문에'pack'을 제안했습니다. – Stefan

-1
x = 20 

y = '\%03o' % x 

puts y 

추천

.

+0

고맙게도 알아챈 첫 번째 답변으로, 내 순진 어린 자아가이 질문을 정확하게 지정하지 않았습니다. 원하는 출력의 단일 백 슬래시가 실수가 아니 었습니다. 나는 정말로 ""024를 원했다. –

+1

제가 알기로, 정답은'x.chr'을 사용하는 것입니다 - 또는 문제에 대한보다 "일반적인"해결책이 필요합니다 (조심해서!) :'eval '? \\ # {x.to_s (8)} "'또는'eval"? \\ x # {x.to_s (16)} "'. –