int에 char을 할당하면이 문제가 발생합니다. 나는 consts * 데이터을 가지고 있는데, 이것들은 differents 객체의 크기의 저장소처럼 작동합니다. 데이터이 객체와 같은 크기를 갖고 있는지 확인하기 위해 이것을 사용하면 데이터에 정수를 추가합니다. 문제는 내가 2데이터, ASCII 표 2 개의 위치를 이동하지만 어떻게 데이터를 문자열로 동작합니다을 추가 할 때, 나는이 또한 작동 방법을 이해 할 수없는 것으로 예상 있다는 것입니다.Int char에 추가, 예상대로 동작하지 않습니다.
예 : 나는 문자를 '' '저장 const를 숯불 * 데이터을 가지고, 내가 할 경우 즉, 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를 더합니다. –