在Smalltalk VisualWorks 7.9.1中转换

时间:2013-03-09 18:31:20

标签: smalltalk visualworks

我需要将ByteString转换为Float32(完全是32位大端IEEE 754浮点数)。 ByteString是通过UDP客户端接收的开放声音控制流的一部分。 我花了很多时间研究,所以我想要一个方便的Smalltalk可以给我一个解决方案。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

由于您似乎接收二进制数据,而不是格式化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

答案 1 :(得分:0)

在Pharo Smalltalk中你可以做到:

   (Float readFrom: '4.2') asIEEE32BitWord

readFrom:只是从字符串中读取一个浮点数,然后将其转换为IEEE 754 ...

答案 2 :(得分:0)

在VisualWorks中,您需要使用超类方法readFrom:在类Number中实现。 首先在字符串上创建一个读取流,例如:

Number readFrom: '192843.887' readStream