3

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

请就我可以实现这一目标的方法提出建议。

4

1 回答 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/1 unicode:characters_to_binary/2)可以使用:

1> unicode:characters_to_binary("тест", unicode, utf8).
<<209,130,208,181,209,129,209,130>>
于 2013-11-05T22:59:40.690 回答