C++获取字节数组中字符串后的短数字

标签 c++ pointers variable-assignment short

嘿,所以关注这个Question

我又被卡住了,是的,我已经尝试通过网络和教科书进行查找。我知道这么快发布另一个问题可能不好,但我真的很难解决这个问题。所以无论如何...

作业的下一部分要求我找到这个人的年龄,这个年龄位于名字后面的下一个字节。基本上,如果名字是“Bob”,它会是

[L][u][k][e][\0][\0][1][5]

其中所有具有偶数个字符的名称都获得 2 个空字符以使其成为偶数,然后接下来的两个字节存储一个 short 整数。目前我已经尝试查看字符串长度,然后在将其放入偏移量之前添加更多长度,但它似乎不起作用

    if (name.length() % 2 != 0) {
        offset += (name.length());
        age = *((short*)foo+offset);
        cout << age << "\n";
    } else {
        offset += (name.length());
        age = *((short*)foo+offset);
        cout << age << "\n";
    }

最佳答案

您忽略了 C 和 C++ 将指针增量乘以所指向对象的大小。所以 *((short*)foo+offset) 实际上将偏移量乘以 sizeof(short) 字节添加到 foo。

或者您可能理解这一点但没有意识到转换的优先级高于加法,(short*)foo+offset 是 ((short*)foo)+offset 而不是 (short*)(foo+offset ).

无论如何你想要的是*(short*)((char*)foo + offset)。如果 foo 已经是 char* 或某种类似类型,那么您可以省略对 char* 的转换。

关于C++获取字节数组中字符串后的短数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967647/

相关文章:

c++ - 将一个函数的 vector + map 版本合并为一个兼容的版本

c++ - 为什么这两个函数指针在 C/C++ 中都是合法的?

java - 为什么不能将两个字节加一个整数并可以将两个最后字节加一个字节?

c++ - 我应该将什么类型的指针传递给 C++11 中的方法?

c - 如何通过数组中的类型转换来分离数据?

java - 发生异常时赋值(Java)

python - 如何将数据列分配给变量

c++ - "vector<long long> distance(n, std::numeric_limits<long long>::max()); "行的含义是什么?

c++ - main 已经在 main.obj 中定义

c++ - 使用字符串映射 vector C++ 时可能存在内存泄漏