2013-10-16 161 views
0

給定一個整數 - 比方說,x=20,我想將其轉換爲包含其轉義八進制字符的字符串。即...將int轉換爲八進制字符

x=20 

# y = ... Some magic 

p y # => "\024" 

我已經成功地得到最接近的是通過使用:

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

不過,我完全stumpted如何這個字符串轉換成八進制轉義字符!任何想法,互聯網?

+0

'「\ 024」.b'表示爲'「\ x14」',你想要做什麼? – Stefan

+0

好吧,那麼我怎樣才能將20轉換成「\ x14」?再次,我只知道如何將它轉換爲「14」。 –

+0

我試圖做一些低級別的數據包操作,這需要我輸入某些字段作爲它們的八進制值。 –

回答

1

只需使用Kernel#sprintf格式化數字。

像這樣

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

puts y 

輸出

\024 

更新

也許我誤解你了。如果你只想要一個具有給定代碼點的字符,那麼就使用Integer#chr

喜歡這個

x = 20 
y = x.chr 

p y 

輸出

"\x14" 
0

你可以使用Array#pack

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

使用'pack'和'unpack'來模擬'Integer#chr'和'String#split'等定製方法的功能是不正確的。 – Borodin

+0

我建議'pack',因爲OP想做「低級」操作。 – Stefan

-1
x = 20 

y = '\%03o' % x 

puts y 

如果使用p顯示Ÿ你會看到2個反斜線p輸出紅寶石可解析字符串。

+0

作爲感謝地注意到的頂級答案,我幼稚的年輕的自己並沒有準確地指出這個問題:我期望的輸出中的單個反斜槓並不是一個錯誤;我真的很想''\ 024「'。 –

+1

正如我現在知道的,正確的答案只是使用'x.chr' - 或者一個更「通用」的解決方案來解決問題(你是否需要它)是(謹慎的)做:'eval「? \\#{x.to_s(8)}「'或者'eval」?\\ x#{x.to_s(16)}「'。 –

相關問題