我需要将 a 转换ByteString
为 a Float32
(正好是 32 位大端 IEEE 754 浮点数)。这ByteString
是通过 UDP 客户端接收的开放声音控制流的一部分。我花了很多时间进行研究,所以我希望有 Smalltalk 得心应手的人可以给我一个解决方案。
提前致谢。
我需要将 a 转换ByteString
为 a Float32
(正好是 32 位大端 IEEE 754 浮点数)。这ByteString
是通过 UDP 客户端接收的开放声音控制流的一部分。我花了很多时间进行研究,所以我希望有 Smalltalk 得心应手的人可以给我一个解决方案。
提前致谢。
由于您似乎接收的是二进制数据,而不是格式化 ASCII 中的十进制数,因此我不建议将其称为 ByteString,而是 ByteArray,字符串是包含字符而不是位的抽象。
在 VisualWorks 的情况下,有一个类称为UninterpretedBytes
专门用于存储原始数据(位或更确切地说是字节)以供以后解释。此类具有解释字节所需的所有消息,例如#floatAt:bigEndian
:
| yourBinaryStream buffer |
yourBinaryStream := ... insert some code to create your stream here...
buffer:= UninterpretedBytes from: (yourBinaryStream next: 4).
nextFloat := buffer floatAt: 1 bigEndian: true
在 Pharo Smalltalk 中,您可以:
(Float readFrom: '4.2') asIEEE32BitWord
readFrom:只是从字符串中读取一个浮点数,然后将其转换为 IEEE 754 ...
在 VisualWorks 中,您需要使用超类方法readFrom
:在类中实现Number
。首先在字符串上创建一个readstream,例如:
Number readFrom: '192843.887' readStream