Linux 64位系统,将8字节数据转换为4字节数据

时间:2023-01-11 23:48:43
   最近在开发大华的SDK,但是在调用设置回调函数那部分只能向回调函数传入unsigned int 类型的数据,我想传入的是指针数据,也就是类的this指针,这个怎么破!!!
   CLIENT_SetRealDataCallBackEx(lRealPlayHandle, RealDataCallBackEx,  (DWORD)1, 0x01);

9 个解决方案

#1


DWORD是如何typedef的?

#2


DWORD  就是unsigned int  类型的

#3


估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

#4


引用 3 楼 yangyunzhao 的回复:
估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

思路不错! Linux 64位系统,将8字节数据转换为4字节数据

#5


具体怎么做啊  求教

#6


弄个自加的unsigned int的id号
每个id都映射到你的指针上,
映射最简单就用std::map,还可以用unordered_map,vector
注意线程安全哦~~

#7


看了标题,不清楚为何做这种舍去高位的转换,这不是安全的转换,4到8才是正道,做产品不是炫耀技术,再说,根本无法彻底解决问题。因为4位无法表示8位所能表示的所有值,就是解决了,也引入很多限制,不利于后续的维护,也是比较别扭。

#8


引用 4 楼 zhao4zhong1 的回复:
Quote: 引用 3 楼 yangyunzhao 的回复:

估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

思路不错! Linux 64位系统,将8字节数据转换为4字节数据


到处都可以看到赵老师 Linux 64位系统,将8字节数据转换为4字节数据



引用 6 楼 q191201771 的回复:
弄个自加的unsigned int的id号
每个id都映射到你的指针上,
映射最简单就用std::map,还可以用unordered_map,vector
注意线程安全哦~~


推荐unordered_map,比map快多了!!




引用 7 楼 kisslalaa 的回复:
看了标题,不清楚为何做这种舍去高位的转换,这不是安全的转换,4到8才是正道,做产品不是炫耀技术,再说,根本无法彻底解决问题。因为4位无法表示8位所能表示的所有值,就是解决了,也引入很多限制,不利于后续的维护,也是比较别扭。

就是啊!!

#9


     最后还是和厂家联系,让他们修改了SDK中的接口,多谢各位

#1


DWORD是如何typedef的?

#2


DWORD  就是unsigned int  类型的

#3


估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

#4


引用 3 楼 yangyunzhao 的回复:
估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

思路不错! Linux 64位系统,将8字节数据转换为4字节数据

#5


具体怎么做啊  求教

#6


弄个自加的unsigned int的id号
每个id都映射到你的指针上,
映射最简单就用std::map,还可以用unordered_map,vector
注意线程安全哦~~

#7


看了标题,不清楚为何做这种舍去高位的转换,这不是安全的转换,4到8才是正道,做产品不是炫耀技术,再说,根本无法彻底解决问题。因为4位无法表示8位所能表示的所有值,就是解决了,也引入很多限制,不利于后续的维护,也是比较别扭。

#8


引用 4 楼 zhao4zhong1 的回复:
Quote: 引用 3 楼 yangyunzhao 的回复:

估计没法弄吧,4字节怎么传8字节啊。

除非你自己想办法做一个映射。你把8字节的数据转换为4字节,例如从1开始编号。回调你的时候,你自己查映射表,还原出真实的8字节数据。

思路不错! Linux 64位系统,将8字节数据转换为4字节数据


到处都可以看到赵老师 Linux 64位系统,将8字节数据转换为4字节数据



引用 6 楼 q191201771 的回复:
弄个自加的unsigned int的id号
每个id都映射到你的指针上,
映射最简单就用std::map,还可以用unordered_map,vector
注意线程安全哦~~


推荐unordered_map,比map快多了!!




引用 7 楼 kisslalaa 的回复:
看了标题,不清楚为何做这种舍去高位的转换,这不是安全的转换,4到8才是正道,做产品不是炫耀技术,再说,根本无法彻底解决问题。因为4位无法表示8位所能表示的所有值,就是解决了,也引入很多限制,不利于后续的维护,也是比较别扭。

就是啊!!

#9


     最后还是和厂家联系,让他们修改了SDK中的接口,多谢各位