2011-01-12 5 views
2

Я хотел бы написать функцию, которая не конвертировать «без видимого кода ASCII» в видимой строкеASCII код не отображаемый

пример:

а \ г \ п будет а < 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

0

Я думаю, вы могли бы использовать Io: формат

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

Нет, я хочу "а <0d><0a>" – Bertaud

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, вы должны использовать их по соображениям эффективности и не учитывать «списки: flatten/1' call. – ndim

Смежные вопросы