charにintを代入するとこの問題が発生します。 私はconst char * データを持っています。これはdifferentsオブジェクトのサイズの記憶域のように機能します。 データがオブジェクトと同じサイズを持っているかどうかを確認するためにこれを使用して、次に整数をデータに追加します。 問題は、私は私が にデータ、ASCIIテーブル内の2つの位置を移動しますが、どのようにデータ列として振る舞いを追加するとき、私はこのほかにどのように機能するかを理解できないことを期待ということ、です。int charに追加すると、期待通りに動作しません
例:私は、char「と `」保存のconstのchar *データを持っている、と私は作る場合には、96の値を持っている:
data += 2;
が、私は結果がであることを期待しますBが、値60
私が起こるかを示すために、関数SYS_LOGを使用して<です。
機能ブート:
void Boot(const char* data){
[...]
/*
* OBJECT PROTO
*/
sys_log(0, "BOOT: OBJ PROTO data string: data = %s", data);
sys_log(0, "BOOT: OBJ PROTO size of data: %d", decode_2bytes(data));
if (decode_2bytes(data) != sizeof(TObjectProto))
{
sys_err("object proto table size error");
thecore_shutdown();
return;
}
sys_log(0, "BOOT: OBJ PROTO data after decode_2bytes(data): data = %s", data);
data += 2;
sys_log(0, "BOOT: OBJ PROTO data str + 2: data = %s", data);
size = decode_2bytes(data);
sys_log(0, "BOOT: OBJ PROTO data to size: size = %d", size);
data += 2;
sys_log(0, "BOOT: OBJ PROTO data str + 2: data = %s", data);
sys_log(0, "BOOT: OBJ PROTO data to size: size = %d", decode_2bytes(data));
CManager::instance().LoadObjectProto((TObjectProto *) data, size);
sys_log(0, "To data assign %d * %d", size, sizeof(TObject));
data += size * sizeof(TObjectProto);
sys_log(0, "BOOT: OBJ PROTO data str: data = %s", data);
[...]
decode_2bytes():
inline WORD decode_2bytes(const BYTE *a)
{
return (*((WORD *) a));
}
SYS_LOG:
Apr 12 09:05:54.205886 :: BOOT: OBJ PROTO data string: data = `
Apr 12 09:05:54.205914 :: BOOT: OBJ PROTO size of data: 96
Apr 12 09:05:54.205924 :: BOOT: OBJ PROTO data after decode_2bytes(data): data = `
Apr 12 09:05:54.205933 :: BOOT: OBJ PROTO data str + 2: data = <
Apr 12 09:05:54.205948 :: BOOT: OBJ PROTO data to size: size = 60
Apr 12 09:05:54.205961 :: BOOT: OBJ PROTO data str + 2: data = ½6
Apr 12 09:05:54.205970 :: BOOT: OBJ PROTO data to size: size = 14013
Apr 12 09:05:54.209238 :: To data assign 60 * 40
Apr 12 09:05:54.209247 :: BOOT: OBJ PROTO data str: data = (
SYS_LOGで見ることができるように、私は値、データが含まれているかを示します、2を加えたときに得られる結果。
逆参照された値ではなく、ポインタに2を追加しているようです。 – Nattrass
あなたは何も追加していません。ポインタを動かしています。 ASCIIでは、バックティックは96、 '<'は60です。あなたのバッファは '{96,0,60,0,171,54、...}で始まります。 (そして、バイナリデータを文字列として出力しようとしています。)[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)をお勧めします。 – molbdnilo
あなたは 'data'がポインタであることを忘れているようです。あなたは2つをポインタに追加しています。 –