C ++获取字节数组中字符串后的短数
Posted
技术标签:
【中文标题】C ++获取字节数组中字符串后的短数【英文标题】:C++ obtaining the short number after a string in an array of bytes 【发布时间】: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";
【问题讨论】:
什么是name
? foo
是什么?数字也不会像那样存储在文本中(除非您在示例数组中从显示字符切换为数值)。哦,您在 if
和 else
中都在做同样的事情。
name 是一个字符串,foo 是一个 const void *(查看问题的链接以获取更多详细信息),是的,我注意到(我在粘贴之前 crtl+z 一次太多次
【参考方案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 祝你好运并坚持下去 :) 不要犹豫,问问题,这就是你学习的方式。以上是关于C ++获取字节数组中字符串后的短数的主要内容,如果未能解决你的问题,请参考以下文章
在C#中获取整数的上下字节并将其作为char数组发送到com端口,如何?