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

McK*_*bet 2 erlang smpp

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

请通过我能实现这一目标的方式提出建议.

hdi*_*ima 9

可能首先要注意的是Erlang中的字符串没有特殊类型.因此,Erlang中的字符串实际上表示为整数列表:

1> [116, 101, 115, 116].
"test"
Run Code Online (Sandbox Code Playgroud)

因此,请记住,您的问题实际上已转换为"如何将整数列表转换为字节".现在,对于具有8位字符的字符串,list_to_binary/1函数应该非常简单:

1> list_to_binary("test").
<<"test">>
2> list_to_binary([0, 255]).
<<0,255>>
Run Code Online (Sandbox Code Playgroud)

但是,如果您有一个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])
Run Code Online (Sandbox Code Playgroud)

在这种情况下,可以使用来自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>>
Run Code Online (Sandbox Code Playgroud)