我正在尝试使用Erlang实现SMPP协议,但在将字符串(如用户名和密码)转换为字节以生成要发送到SMSC的PDU时遇到了问题。所有搜索和阅读各种材料都没有帮助。
请建议一种我可以实现此目标的方法。
值得注意的第一件事是Erlang中没有专门用于字符串的类型。因此,Erlang中的字符串实际上表示为整数列表:
1> [116, 101, 115, 116].
"test"
所以记住你的问题实际上被转化为“如何将整数列表转换为字节”。现在使用list_to_binary/1函数,针对包含8位字符的字符串,这应该相当简单:
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>>