c – 如何安全地将`unsigned long int`转换为`int`?

前端之家收集整理的这篇文章主要介绍了c – 如何安全地将`unsigned long int`转换为`int`?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序,它以无符号长整数的形式创建唯一的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的信息,但您表示这不是问题.

但是你的问题很模糊,很难说这是否符合你的目的.

猜你在找的C&C++相关文章