嘿,所以关注这个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/