2

ByteStringaをFloat32(正確に32ビットのビッグエンディアンIEEE 754浮動小数点数)に変換する必要があります。これByteStringは、UDPクライアントを介して受信されるオープンサウンドコントロールストリームの一部です。私は多くの時間を研究に費やしてきたので、Smalltalkを持っている便利な人が私に解決策を教えてくれることを望んでいます。

前もって感謝します。

4

3 に答える 3

2

フォーマットされた ASCII の 10 進数ではなくバイナリ データを受け取っているように見えるので、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
于 2013-03-11T19:02:26.143 に答える
0

readFromVisualWorks では、クラスに実装されているスーパークラス メソッドを使用する必要がありますNumber。最初に文字列に readstream を作成します。次に例を示します。

Number readFrom: '192843.887' readStream
于 2013-03-11T15:13:56.967 に答える
0

Pharo Smalltalk では、次のことができます。

   (Float readFrom: '4.2') asIEEE32BitWord

readFrom: 文字列から float を読み取るだけで、それを IEEE 754 に変換します...

于 2013-03-10T16:09:18.660 に答える