将Pharo Smalltalk中的浮点转换为bytearray?

将Pharo Smalltalk中的浮点转换为bytearray?,smalltalk,pharo,Smalltalk,Pharo,我正在使用Pharo Smalltalk 2.0。我需要把一个浮点数转换成一个字节数组。似乎没有办法做到这一点,有没有迂回的方法呢 例如,1 asFloat asByteArray将是完美的 上下文:我正在尝试使用ZINK websocket软件包通过websocket发送二进制数据。AFloat已经是一个变量类,即有点类似于数组: 3.14. "=> 3.14" 3.14 size. "=> 2" 3.14 at: 1. "=> 1074339512" 3.14 at: 2.

我正在使用Pharo Smalltalk 2.0。我需要把一个浮点数转换成一个字节数组。似乎没有办法做到这一点,有没有迂回的方法呢

例如,
1 asFloat asByteArray
将是完美的


上下文:我正在尝试使用ZINK websocket软件包通过websocket发送二进制数据。

A
Float
已经是一个变量类,即有点类似于数组:

3.14. "=> 3.14"
3.14 size. "=> 2"
3.14 at: 1. "=> 1074339512"
3.14 at: 2. "=> 1374389535"
您还可以修改它:

| f |

f := 3.14.
f at: 1 put: 10000.
f. "=> 2.1220636948306e-310"
记住这一点,您现在可以处理这两个整数

然而,Pharo 2.0通常预装燃料, 它已经包含序列化浮点的方法:

ByteArray streamContents: [ :s |
  FLEncoder on: s globalEnvironment: Dictionary new do: [ :e |
    3.14 serializeOn: e ]] "=> #[64 9 30 184 81 235 133 31]"
如果您有Pharo或Pharo,您可能希望完全使用燃料序列化
两端都吱吱作响。

如果您使用的是i386 CPU,则可以使用本机boost

(ByteArray new: 8) nbFloat64AtOffset: 0 put: Float pi; yourself
请注意,在这种情况下,字节顺序是不确定的

否则,您将拥有与平台无关的访问权限:

(ByteArray new: 8) doubleAt: 1 put: Float pi bigEndian: true ; yourself
注意第一种情况的索引是0,第二种情况的索引是1