我有一个应用程序,它以无符号长整数的形式创建唯一的ID.该应用程序需要这种精度.
但是,我必须使用仅允许int的协议发送这些ID.接收应用程序 – 协议 – 不需要这种精度.所以我的问题是:如何将unsigned long int转换为int,尤其是当unsigned long int大于int时?
编辑:
该协议仅支持int.我很高兴知道如何避免“翻车问题”
发送消息的应用程序需要长时间知道唯一性,而接收者只需要在很短的时间内知道唯一性.
解决方法
这是一种可能的方法:
#include <climits> unsigned long int uid = ...; int abbreviated_uid = uid & INT_MAX;
例如,如果int是32位,则丢弃除UID的低位31位之外的所有位.它只会产生非负值.
这会丢失原始uid的信息,但您表示这不是问题.
但是你的问题很模糊,很难说这是否符合你的目的.