这样的网络数组怎么复制到结构体?

shanyang1 2011-02-16 05:34:52
网络收到byte数组{0x01,0x02,0x03,0x04,0x05,0x06,0x07};
结构体
struct aaa
{
char a;//正确的值应为0x01
int b;//正确的值应为0x050x040x030x02即05040302 = 十进制84148994
short c;//正确值0x070x06即706 = 十进制1798
}

怎么把byte数组的内容复制到结构体里面,直接memcpy试过了不行,值全错的
...全文
147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky12312388 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bluesky12312388 的回复:]

算了还是照顾下LZ吧,
首先你从网络上收到数据,可以知道其长度(如果是其中一段数据,那你肯定也知道格式的),
知道长度就好办了。代码如下:

C/C++ code
#include <stdio.h>
#include <memory.h>

#pragma pack(1)
struct tagData
{
char a;//正确的值应为0x01
int b;//……
[/Quote]
更正 printf("%d\n",data.c); // 1798
bluesky12312388 2011-02-16
  • 打赏
  • 举报
回复
算了还是照顾下LZ吧,
首先你从网络上收到数据,可以知道其长度(如果是其中一段数据,那你肯定也知道格式的),
知道长度就好办了。代码如下:

#include <stdio.h>
#include <memory.h>

#pragma pack(1)
struct tagData
{
char a;//正确的值应为0x01
int b;//正确的值应为0x050x040x030x02即05040302 = 十进制84148994
short c;//正确值0x070x06即706 = 十进制1798
};
#pragma pack()

int main()
{
unsigned char arrByte[] = { 0x01,0x02,0x03,0x04,0x05,0x06,0x07 };
int len = 7;
tagData data;

memcpy((unsigned char*)&data,arrByte,len);
printf("%d\n",data.a); // 1
printf("%d\n",data.b); // 84148994
printf("%d\n",data.c); // 1298

return 0;
}
Lactoferrin 2011-02-16
  • 打赏
  • 举报
回复
编写处理单一{0x01,0x02,0x03,0x04,0x05,0x06,0x07};的函数
然后对一串这样的数据连续使用这个函数
shanyang1 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qq120848369 的回复:]

例如aaa.b怎么赋值。

char *pB=(char*)(&aaa.b);
pB[0]=0x02;
pB[1]=0x03;
.
.
.
[/Quote]

要是有几百个我不写的累死了
希望有类似memcpy这样的一下子就搞定的方法
菜鸟在成长 2011-02-16
  • 打赏
  • 举报
回复
qq120848369 2011-02-16
  • 打赏
  • 举报
回复
例如aaa.b怎么赋值。

char *pB=(char*)(&aaa.b);
pB[0]=0x02;
pB[1]=0x03;
.
.
.
justkk 2011-02-16
  • 打赏
  • 举报
回复
涉及网络字节顺序
对于int,ntohl()把网络字节顺序转换为主机字节顺序
对于short,ntohs()把网络字节顺序转换为主机字节顺序
第一篇 基础知识篇 实例1 数据类型转换 实例2 转义字符 实例3 关系和逻辑运算 实例4 自增自减 实例5 普通位运算 实例6 位移运算 实例7 字符译码 实例8 指针操作符 实例9 if判断语句 实例10 else-if语句 实例11 嵌套if语句 实例12 switch语句 实例13 for语句 实例14 while语句 实例15 do-while语句 实例16 break和continue语句 // 实例17 exit()语句 // 实例18 综合实例 实例19 一维数组 实例20 二维数组 实例21 字符数组 // 实例22 数组初始化 // 实例23 数组应用 实例24 函数的值调用 实例25 函数的引用调用 //swap 实例26 数组函数的调用 // 实例27 命令行变元 // 实例28 函数的返回值 实例29 函数的嵌套调用 实例30 函数的递归调用 实例31 局部和全局变量 实例32 变量的存储类别 实例33 内部和外部函数 实例34 综合实例1 实例35 综合实例2 实例36 变量的指针 实例37 一维数组指针 实例38 二维数组指针 实例39 字符串指针 实例40 函数指针 实例41 指针数组 实例42 二维指针 实例43 指针的初始化 实例44 综合实例 第二篇 深入提高篇 实例45 结构体变量 实例46 结构体数组 实例47 结构体指针变量 实例48 结构体指针数组 实例49 共用体变量 实例50 枚举类型 实例51 读写字符 实例52 读写字符串 实例53 格式化输出函数 实例54 格式化输入函数 实例55 打开和关闭文件 实例56 fputc()和fgetc() 实例57 函数rewind() 实例58 fread()和fwrite() 实例59 fprintf()和fscanf() 实例60 随机存取 实例61 错误处理 实例62 综合实例 实例63 动态分配函数 实例64 常用时间函数 实例65 转换函数 实例66 查找函数 实例67 跳转函数 实例68 排序函数 实例69 伪随机数生成 实例70 可变数目变元 第三篇 常用算法篇 实例71 链表的建立 实例72 链表的基本操作 实例73 队列的应用 实例74 堆栈的应用 实例75 串的应用 实例76 树的基本操作 实例77 冒泡排序法 实例78 堆排序 实例79 归并排序 实例80 磁盘文件排序 实例81 顺序查找 实例82 二分法查找 实例83 树的动态查找 实例84 二分法求解方程 实例85 牛顿迭代法求解方程 实例86 弦截法求解方程 实例87 拉格朗日插值 // 实例88 最小二乘法拟合 ?? 实例89 辛普生数值积分 实例90 改进欧拉法 实例91 龙格-库塔法 实例92 高斯消去法 实例93 正定矩阵求逆 第四篇 综合应用篇 实例94 用C语言实现遗传算法 实例95 人工神经网络的C语言实现 实例96 K_均值算法 实例97 ISODATA算法 实例98 快速傅立叶变换 实例99 求解野人与传教士问题 实例100 简单专家系统

69,371

社区成员

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

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