如何在Erlang中将字符串转换为字节

3

我正在尝试使用Erlang实现SMPP协议,但在将字符串(如用户名和密码)转换为字节以生成要发送到SMSC的PDU时遇到了问题。所有搜索和阅读各种材料都没有帮助。

请建议一种我可以实现此目标的方法。


你应该指定要生成的编码,否则很难帮助你。 - RichardC
可能是重复的问题:在Erlang中如何将字符串转换为二进制值? - legoscia
1个回答

11

值得注意的第一件事是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/1unicode:characters_to_binary/2):

1> unicode:characters_to_binary("тест", unicode, utf8).
<<209,130,208,181,209,129,209,130>>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接