2016-09-16 11 views
1

私はメモリにdoubleの配列またはintの配列を持つCプログラムを持っています。 Cプログラムは、ZeroMQを使って対応するバイナリデータをOCamlプログラムに送信します。 OCamlプログラムはbytesを受信しましたが、今度はbytesArray of intまたはArray of floatに変換したいと思います。これどうやってするの?OCaml Byte to Big Array

答えて

2

ocplib-endianを使用すると、文字列の生の値を読み取ることができます。例えば

stringバッファからdouble値読み出す機能:あなたは/チェックを知っている場合は/文字列がdouble秒に過ぎない、あなたはこのようread_double機能を使用できることを前提としてい

let read_double buf offset = 
    (* Multiply by 8 for 8-byte doubles *) 
    EndianString.LE.get_double buf (offset * 8) 

を配列を作成する:

let read_array buf = 
    (* Again, 8 for 8-byte doubles *) 
    let length = String.length buf/8 in 
    Array.init length (fun i -> read_double buf i) 

これはすべてテストされていないので、タイプミスに注意してください!この実装は通常の使用にはあまりにも悪くあってはいけませんが、より効率的にする方法もあります。

+0

私が探していたもの!この回答は非常に役に立ちます。 –