2011-01-12 102 views
2

我還想寫其將 「不可見的ASCII碼」 可見字符串的函數ASCII碼不顯示

例如:

ABC \ r \ n將成爲ABC < 0D> < 0A>

什麼是最好的方法?這個功能是否已經存在?

回答

0

剛剛改寫由@Nibon給出的解決方案

pp(Str) -> pp(Str, []). 

pp([],Acc) -> lists:flatten(lists:reverse(Acc)); 
pp([C|S], Acc) when C < 32; C>126 -> pp(S,[io_lib:format("<~2.16.0B>",[C]) | Acc]); 
pp([C|S], Acc) -> pp(S,[C | Acc]). 

1> pp:pp("abc\r\n"). 
"abc<0D><0A>" 
+0

請注意,如果您可以使用iolists,則應出於效率原因使用它們,並省略`lists:flatten/1`調用。 – ndim 2011-01-15 14:40:26

0

我想你可以使用IO:格式

1>io:format("~w~n",["abc\r\n"]). 
[97,98,99,13,10] 
ok 
2> 
+0

不,我想 「ABC <0d><0a>」 – Bertaud 2011-01-12 22:08:36

1
pp(C) when C <32 ; C>126 -> 
io_lib:format("<~2.16.0B>",[C]); 
pp(C) -> 
C. 

1>lists:flatten(lists:map(fun pp/1,"abc\r\n")). 
"abc<0D><0A>" 
+0

請注意,如果您可以使用iolists,你應該使用它們出於效率的原因,並且省略`list:flatten/1`調用。 – ndim 2011-01-15 14:40:52