3

Erlang を使用して SMPP プロトコルを実装しようとしていますが、SMSC に送信する PDU を作成するために、ユーザー名やパスワードなどの文字列をバイトに変換しようとして行き詰まりました。すべての検索とさまざまな資料の読み取りは役に立ちませんでした。

これを達成する方法について親切にアドバイスしてください。

4

1 に答える 1

11

おそらく最初に注意すべきことは、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>>
于 2013-11-05T22:59:40.690 に答える