Int附加到char,表现不像我预期的那样

时间:2017-04-14 21:48:22

标签: c++ char int byte

我有这个问题,为char分配一个int。 我有一个const char * 数据,就像存储大小不同的对象一样。 我使用它来验证数据是否具有与对象相同的大小,如果是,那么我将 2 整数附加到数据。 问题是,我预计当我将 2 附加到数据时,在ASCII表中移动2个位置,但数据如何表现为字符串,我无法理解这种添加是如何起作用的。

示例:我有一个 const char * data ,它存储一个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时获得的结果。

1 个答案:

答案 0 :(得分:2)

  

数据+ = 2;

     

我希望结果是b,但是&lt;值为60。

您只需将指针递增2,因此它将指向字符串的第3个字符,即<。如果字符串恰好在此之前结束,它甚至可能是一些随机值。

要递增指针所指向的,您必须取消引用指针:

*data += 2;

但这会触发编译器错误,因为data被声明为const char*

如果要修改字符串,请将参数更改为char* data