2

サーバーから UDP パケットを受信して​​います (正確には、Open Sound Control パケット)。これらのパケットを ByteArray に格納しています。

受信したデータを活用できるように、この ByteArray を String に変換したいと考えています。私は多くの変換を試みましたが、毎回読めない文字があります。

コードは次のとおりです。

| server peerAddr |
server := SocketAccessor newUDPserverAtPort: 3333.
peerAddr := IPSocketAddress new.
buffer := ByteArray new: 1024.
[ server readWait.
server receiveFrom: peerAddr buffer: buffer.

Transcript show: (buffer asString) ; cr ; flush. ] repeat.

次の変換も試しましたが、無駄でした:

buffer asByteString.
buffer asStringEncoding:#UTF8.
buffer asStringEncoding:#UTF16.
buffer  asString.
buffer  asBase64String.
buffer  asFourByteString
buffer withEncoding: #ASCII

文字列出力は次のとおりです。 ここに画像の説明を入力

何か助けはありますか?

追加情報: 受信したデータはオープン サウンド コントロール データであるため、特定のフォーマットを持っているため、そのように表示されます。int、float、string、および特定の bytearray インデックスを解析する必要があります。それらの可能性を提供するパッケージを推奨する人はいますか?

事前にt​​hx。

4

3 に答える 3

3

バイト配列からデータを読み取りたい場合は、そのために UninterpretedBytes クラスを使用します。

できるよ:

ubytes := UninterpretedBytes from: aByteArray. ubytes doubleAt: 5.

そのようなもの。解釈されていないバイトを使用して、バイトから文字列を読み取ることもできます。

于 2013-02-28T11:35:02.257 に答える
3

バイトを文字列に変換する正しい方法は、正しい文字エンコーディングを確実に適用することです。以下

(65 to: 75) asByteArray asStringEncoding: #UTF8

譲るべき

'ABCDEFGHIJK'

#asStringEncoding: を使用するのが正しい方法です。ただし、画面キャプチャを見ると、受信しているバイトはまっすぐな文字列ではないようです。おそらく、最初に分解し、実際にutf8でエンコードされていることがわかっている部分(またはエンコードが何であれ)を文字列にデコードする必要があるバイナリパケット形式がいくつかあります。

于 2013-02-28T15:19:55.080 に答える
2

おそらく、Squeak の OSC パッケージの多くのコードを借りることができます: http://opensoundcontrol.org/implementation/squeak-osc

于 2013-03-01T01:50:53.137 に答える