c++ - Int 追加到 char,行为不符合我的预期

标签 c++ char int byte

我遇到了将 int 分配给 char 的问题。 我有一个 const char * data,它的工作方式类似于存储不同大小的对象。 我使用它来验证 data 是否具有与对象相同的大小,如果是这样,那么我将 2 整数附加到数据。 问题是,我预计当我将 2 附加到 data 时,会在 ASCII 表中移动 2 个位置,但是 data 如何表现得像一个字符串,我不明白这个加法是如何工作的。

示例:我有一个 const char* 数据,它存储一个 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));
}

系统日志:

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 时获得的结果。

最佳答案

data += 2;

I would expect the result to be b, but is < with a value 60.

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

要增加指针指向的,您必须解引用指针:

*data += 2;

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

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

关于c++ - Int 追加到 char,行为不符合我的预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419680/

相关文章:

sql-server - Char(9) 在 Sql server 2005 中不打印选项卡

c - C 中基于八进制的数字格式

java 将 null 放入 int 变量中

java - 为什么我的整数增加了 2 而不是 1? java

c - 如何从 3 位整数中提取单个数字?

c++ - 使用 C++ makefile 链接文件

c++ - 检测操作系统语言

c++ - Eclipse Indigo C++ 的指标

c++ - 用特征计算两条线的交点

c++ - 有什么方法可以将 "reconst"转换为非 const char 吗?