如何把一个char*中的数据截取出来放到int中

tianlangfeixing 2010-10-29 04:05:39
如:
00 00 00 00 18 00 00 00 08 这9个字节分别从2到5 截取出来放到一个int中,等于24(18转换过来十进制)
从6至9放到另一个int中,变成8

memcpy可以吗??
...全文
219 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tianlangfeixing 的回复:]

引用 4 楼 hustleverpi 的回复:
char* p = 你的字符数组。
int i;
memcpy(&i, p + 2, 3);
就得到了你要的东西。
但是,如果你的char*是从网络中获取的,注意转换网络字节序


我的数据是从网络上获取的 怎么转换??
[/Quote]

大头小头问题。不过你这是字符串的话,应该没啥问题。
hustleverpi 2010-10-29
  • 打赏
  • 举报
回复
楼上的不要误人子弟哈~
函数htonl是本地字节序转网络字节序(long类型)
函数ntohl是网络字节转本地直接(long类型)

同理还有htons, ntohs
很好记,h就是host,主机,n就是net,网络。
luciferisnotsatan 2010-10-29
  • 打赏
  • 举报
回复
atoi
tianlangfeixing 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hustleverpi 的回复:]
char* p = 你的字符数组。
int i;
memcpy(&i, p + 2, 3);
就得到了你要的东西。
但是,如果你的char*是从网络中获取的,注意转换网络字节序
[/Quote]

我的数据是从网络上获取的 怎么转换??
huhacn 2010-10-29
  • 打赏
  • 举报
回复
char *pcData = "000000001800000008";
char *pcTemp = pcData;
char caArrary[10] = {0};
memcpy(caArrary, pcTemp+2, sizeof(char)*8);
int nTmp = atoi(caArrary);
printf("%d", nTmp);
getchar();
hustleverpi 2010-10-29
  • 打赏
  • 举报
回复
上面错了,
memcpy(&i, p + 1, 4);
hustleverpi 2010-10-29
  • 打赏
  • 举报
回复
char* p = 你的字符数组。
int i;
memcpy(&i, p + 2, 3);
就得到了你要的东西。
但是,如果你的char*是从网络中获取的,注意转换网络字节序
justkk 2010-10-29
  • 打赏
  • 举报
回复
哦,搞错了..
这样试试看
memcpy(&i, s+1, 4);
printf("%d\n", i);
tianlangfeixing 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]
可以memcpy + atoi
[/Quote]

具体可以说说吗??
justkk 2010-10-29
  • 打赏
  • 举报
回复
可以memcpy + atoi

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧