繁体   English   中英

在Smalltalk VisualWorks 7.9.1中将Open Sound Control ByteArray转换为String

[英]Converting Open Sound Control ByteArray into String in Smalltalk VisualWorks 7.9.1

我正在从服务器接收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

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

有帮助吗?

附加信息 :收到的数据是打开的声音控制数据,所以它有一个特定的格式,这就是为什么它像这样,我需要解析整数,浮点数,字符串,白色特定的字节序列索引。 有没有人重新提供提供这些可能性的包裹?

Thx提前。

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

你可以做:

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

像那样的东西。 您还可以使用未解释的字节从字节中读取字符串。

将字节转换为字符串的正确方法肯定是应用正确的字符编码。 下列

(65 to: 75) asByteArray asStringEncoding: #UTF8

应该屈服

'ABCDEFGHIJK'

使用#asStringEncoding:是正确的方法。 然而,看着你的屏幕截图,你接收的字节似乎不是直字符串。 可能有一些二进制数据包格式需要首先拆分,然后只解码为字符串那些你知道实际上是utf8编码的部分(或编码是什么)。

你可能可以为Squeak的OSC包借用很多代码: http//opensoundcontrol.org/implementation/squeak-osc

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM