簡體   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