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

【问题讨论】:

什么是namefoo 是什么?数字也不会像那样存储在文本中(除非您在示例数组中从显示字符切换为数值)。哦,您在 ifelse 中都在做同样的事情。 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端口,如何?

C++ 数组转数字

C# 程序无法从 C++ COM 程序中获取字节数组

字节数组赋值问题?

c_cpp 获取一系列数字,并将每个项目替换为数组中所有其他项目的产品

C语言中从广西读入未知长度的数字,放个数组