【问题标题】:Converting Open Sound Control ByteArray into String in Smalltalk VisualWorks 7.9.1在 Smalltalk VisualWorks 7.9.1 中将 Open Sound Control ByteArray 转换为字符串
【发布时间】:2013-02-14 03:15:56
【问题描述】:

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

这是字符串输出:

有什么帮助吗?

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

提前致谢。

【问题讨论】:

  • 如果您检查接收到的 ByteArray 和每个字节,是否有任何 ASCII 字符代码点?像 $A asInteger 的 64 等。尝试找出接收字符串的编码方式。
  • 其实收到的bytearray不只包含Strings,我在问题里加了一些intel。

标签: string bytearray smalltalk osc visualworks


【解决方案1】:

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

你可以这样做:

ubytes := UninterpretedBytes 来自:aByteArray。 ubytes doubleAt: 5.

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

【讨论】:

    【解决方案2】:

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

    (65 to: 75) asByteArray asStringEncoding: #UTF8
    

    应该让步

    'ABCDEFGHIJK'
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,这就是它尝试做的事情,但在 squeak 中有许多视觉作品中不存在的不同包。特别是处理字节流和转换类型。你以前有没有找到任何视觉作品的实现?因为它解决了所有问题。
      • Okey 我已经有了 Siren 和 VWOSC,并且代码仅用于发送 OSC 数据包,在我的情况下,我是接收者。 VW OSC 源代码位于 .sit 扩展名中,我认为它适用于 Mac,我正在使用 Aladdin Expander 进行查看,但无论如何我会继续搜索,如果您有任何新想法,我将不胜感激。非常感谢。
      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      相关资源
      最近更新 更多