2

我正在从服务器接收 UDP 数据包(确切地说:打开声音控制数据包)。我将这些数据包存储在 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

这是字符串输出: 在此处输入图像描述

有什么帮助吗?

附加信息:接收到的数据是开放的声音控制数据,因此它具有特定的格式,这就是为什么它像这样显示的原因,我需要解析整数、浮点数、字符串,以及特定的字节数组索引。有没有人推荐一个提供这些可能性的包?

提前谢谢。

4

3 回答 3

3

如果要从字节数组中读取数据,请使用 UninterpretedBytes 类。

你可以做:

ubytes := UninterpretedBytes 来自: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 回答