2017-12-01 5 views
0

Cで書かれたバイナリファイルを読むには、どのような方法が適していますか? 私はCヘッダファイルを持っていますが、いくつかの '構造体があります。 これらのヘッダファイルは、Goで手動で書き換える代わりに使用できますか?ここでCで書かれたバイナリファイルを読み込み

/* sample.h */ 
#define HEADER_SIZE 2048 //* large then sizeof(header) 
typedef struct { 
    uint8_t version; 
    uint8_t endian; 
    uint32_t createTime; 
} header; 

typedef struct { 
    uint64_t data1; 
    uint32_t data2; 
    char name[128]; 
} record; 

擬似コード

package "main" 
// #include "sample.h" 
import "C" 
func main() { 
    f, _ := os.Open("sample_file") 
    // read(buf, HEADER_SIZE) and print out 
    // use structure header to decode the buf 
    // while not end of file { 
    // read(buf, sizeof(record) and print out 
    // } 
} 
+2

多分[cgo](https://golang.org/cmd/cgo/)が役に立ちます。 – kichik

+2

@kichik:それはOPが既にcgoを使用しているという質問から現れます。 – ruakh

答えて

1

と私の開始囲碁プログラムでは、あなたが行くの構造体に読み込まするbinary.Readを使用することができますhttps://golang.org/pkg/encoding/binary/

で見つけることができencoding/binaryパッケージを使用してそれらを読んでいます。 Cバージョンが追加するパディングを考慮する必要があります。あなたの例では、デフォルトのパディングはcreateTimeの前に2パッドのバイトを配置します。

関連する問題