2016-11-02 11 views
0

文字列を構造体に変換しようとしています。最初のフィールドの構造体は、2番目のフィールドにある文字数を格納します。 私はこのプログラムで私が迷っていることを教えてください。 出力が正しくない(大きな整数値)バッファから構造体への変換

update:このプログラムを修正して4(nsize)を印刷できますか?

#include <iostream> 
using namespace std; 

struct SData 
{ 
    int nsize; 
    char* str; 
}; 

void main() 
{ 
    void* buffer = "4ABCD"; 

    SData *obj = reinterpret_cast< SData*>(buffer); 

    cout<<obj->nsize; 
} 
+0

あなたがしようとしているように見えます独自の文字列クラスを実装します。 'std :: string'を見て、それらが' string'へのポインタからどうなるか見ることができます。 – NathanOliver

+0

あなたは何を見たいですか? – spektr

+0

文字 '' ''4'' ''は整数 '' '4'''と同じではありません。サイズや表記ではありません。 – mascoj

答えて

1

整数は4バイトを占有します。バッファは1バイトを使用します。さらに、文字「4」は整数4の2進形式とは異なります。

+0

それでも、誰も投票を説明する必要はないものの、downvotingとwalking離れて。 –

3

あなたのアプローチはまったく間違っています。まず整数のバイナリ表現は、プラットフォームによって異なります。つまり、sizeofint、ハードウェアのエンディアンです。次に、charポインタをこのように配置することはできませんので、フォーマットに従ってバイトを読み込み、intに変換してメモリを割り当て、残りをそこにコピーするマーシャリングコードを作成する必要があります。あなたの構造体にメモリのブロックをキャストする単純なアプローチは、この構造体では機能しません。

1

データのASCII表現を作成する場合は、シリアル化を行う必要があります。これは単に構造の内容として人間が読める形式のものを単純にそのデータにキャストできることを期待しているだけではありません。シリアライゼーション形式を選択して、それを行うコードを書くか、既存のライブラリを使用する必要があります。

人気のある選択肢:

  • XML
  • JSON
  • YAML

私はJSONを使用する - "C++のJSONライブラリー" のためのgoogle

関連する問題