Hello World by 阿水

思久欲知 知繁渴思 朝乾夕惕 焚膏继晷 日拱一卒 功不唐捐

0%

数据凭借与拆分

1数据拆分

1
2
3
4
5
6
7
8
9
10
11
typedef unsigned char u8;
typedef double f64;
typedef unsigned long long u64;

//拆分数据
void dataSplit(f64 data,u8 *buf)
{
for(int i=0;i<8;i++)
buf[i]=(*((u8 *)(&data)+i));
}

(&data)取出原始数据data的地址
(u8 )(&data),用一个u8(即unsigned char)型指针指向这个地址
((u8
)(&data)+i),指针加减法会移动指向位置,这里按u8长度为一个单位进行移动,从而依次指向原始数据中的每一段u8数据
(((u8 )(&data)+i)),将这个指针的值取出,也就是取出了原始数据中的每一段u8数据的值

2数据整合

1
2
3
4
5
6
7
8
9
10
11
12

//拼接数据
f64 dataAssmeble(u8 *buf)
{
u64 temp=buf[8];
for(int i=6;i>=0;i--)
{temp=(temp<<8)|buf[i];}

f64 *data=(f64*)(&temp);
return *data;
}

将若干u8数据用位运算拼成一个长度相同的整形数据temp
(&temp) 把temp的地址取出
(f64)(&temp),用一个(f64)类型指针指向这个地址,确认了解释方法
(f64)(&temp)取出这个指针的值

微信截图_20221024174829.png

-d10a3f58ee9c8e3.jpg