2017-03-06 10 views
0

私はgolangプロジェクトの多くのアイデアを採用しているC++のプロジェクトに取り組んでいます。
このbinary.writeがdocumentationからどのように動作するのか、またC++でどのように複製できるのかを正しく理解できません。私は私のプロジェクトでこの行に立ち往生しています。Golangのbinary.writeに相当するC++は何ですか?

binary.Write(e.offsets, nativeEndian, e.offset) 

e.offsetsのタイプは*bytes.Bufferで、e.offsetは、C++標準のlibsにuint64

+0

'e.offsets'はファイルまたはバッファですか? – kennytm

+0

@kennytm、私はエキスパートにはいませんが、docsのようです: 'binary.Write(destination、endian、data_to_write) ' –

+0

@ArafatKはあなたが気にするエンディアンのことですか? –

答えて

1

あり、それはエンディアンの問題に対処するのはあなた次第が一般的です。だから当分の間それをスキップしましょう。キャストが必要である

uint64_t value = 0xfeedfacedeadbeef; 
std::ofstream file("output.bin", ios::binary); 
file.write(reinterpret_cast<char*>(&value), sizeof(value)); 

char*とファイルストリームディールので、しかし、あなたはにどんなバイトストリームを書き込むことができます:あなたはちょうどそのようなファイルとしてストリームにバイナリデータを書き込みたい場合は、このような何かを行うことができますそれはあなたが好きです。

"Plain Old Data"(POD)であれば、このように構造全体を記述することもできます。たとえば:

struct T { 
    uint32_t a; 
    uint16_t b; 
}; 

T value2 = { 123, 45 }; 
std::ofstream file("output.bin", ios::binary); 
file.write(reinterpret_cast<char*>(&value2), sizeof(value2)); 

バックこれらの事を読むfile.readを使用して似ていますが、前述のように、あなたが本当にエンディアンに気をすれば、あなたはそれを自分で世話をする必要があります。

POD以外のタイプ(例:std::string)を扱う場合は、より複雑なデータシリアライズシステムを扱う必要があります。必要に応じてこれに対処する多数のオプションがあります。

+0

質問のOPのコメントを確認してください。 Welp、私は分かりませんが、質問の範囲は非常に非C++のようです。 – kennytm

+1

@kennytm、私は同意する、quesitonは非常に曖昧です。 'binary.Write'は"構造体 "のフィールドを基本バイナリの直列化形式としてストリームに書き込むようなことをします**(Goの専門家ではありません)。 私の答え(より良い文脈の欠如を考えれば)は、今私たちが得ることができるほど近いと思います。 –

関連する問題