【问题标题】:C++ obtaining the short number after a string in an array of bytesC ++获取字节数组中字符串后的短数
【发布时间】:2011-08-06 15:02:00
【问题描述】:

嘿,关注这个Question

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

作业的下一部分要求我找到这个人的年龄,这个年龄位于姓名之后的下一个字节上。基本上,如果名字是“鲍勃”,那就是

[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";
    }

【问题讨论】:

  • 什么是namefoo 是什么?数字也不会像那样存储在文本中(除非您在示例数组中从显示字符切换为数值)。哦,您在 ifelse 中都在做同样的事情。
  • name 是一个字符串,foo 是一个 const void *(查看问题的链接以获取更多详细信息),是的,我注意到(我在粘贴之前 crtl+z 一次太多次

标签: c++ pointers variable-assignment short


【解决方案1】:

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

或者也许你明白这一点,但没有意识到强制转换比加法具有更高的优先级, (short*)foo+offset 是 ((short*)foo)+offset 不是 (short*)(foo+offset )。

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

【讨论】:

  • 通过 char* 或一些类似的类型,他的意思是占用 1 个字节。
  • 是的,我不太了解 C/C++ 中的指针,这对我很有帮助,谢谢!
  • 差不多=我学习了大约 2 天的 C++?
  • @SNpn 祝你好运并坚持下去 :) 不要犹豫,问问题,这就是你学习的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多