如何在Erlang中将String转换为字节

时间:2013-11-05 21:08:07

标签: erlang smpp

我正在尝试使用Erlang实现SMPP协议,我试图转换字符串,例如用户名和密码为字节,以便提供PDU发送到SMSC。所有搜索和阅读各种材料都没有帮助。

请以我能达到的方式提出建议。

1 个答案:

答案 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>>