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

时间:2011-08-06 15:02:01

标签: 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";
    }

1 个答案:

答案 0 :(得分:4)

您缺少C和C ++将指针增量乘以指向的对象的大小。所以*((short*)foo+offset)实际上将offsetof(short)字节的偏移时间添加到foo。

或者你可能理解这一点,但没有意识到演员阵容的优先级高于加法,(短*)foo + offset是((short *)foo)+ offset not(short *)(foo + offset) )。

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