我正在尝试使用Erlang实现SMPP协议,我试图转换字符串,例如用户名和密码为字节,以便提供PDU发送到SMSC。所有搜索和阅读各种材料都没有帮助。
请以我能达到的方式提出建议。
答案 0 :(得分:9)
可能首先要注意的是Erlang中没有特殊的字符串类型。因此,Erlang中的字符串实际上表示为整数列表:
1> [116, 101, 115, 116].
"test"
因此请记住,您的问题实际上已转换为“如何将整数列表转换为字节”。现在,对于具有8位字符的字符串,list_to_binary/1函数应该非常简单:
1> list_to_binary("test").
<<"test">>
2> list_to_binary([0, 255]).
<<0,255>>
但是如果你有一个Unicode字符串list_to_binary/1会引发badarg
错误(还要注意错误信息中表示的原始字符串):
1> list_to_binary("тест").
** exception error: bad argument
in function list_to_binary/1
called as list_to_binary([1090,1077,1089,1090])
在这种情况下,可以使用unicode模块中的函数。例如,要将Unicode字符串转换为UTF-8二进制文件unicode:characters_to_binary/3(还有 unicode:characters_to_binary/1 和 unicode:characters_to_binary/2)可以使用:
1> unicode:characters_to_binary("тест", unicode, utf8).
<<209,130,208,181,209,129,209,130>>