我正在使用jannson库从JSON文件读取。我正在读取的键的值为unsigned int
类型。詹森(Jannson)无法识别unsigned int
。因此,我正在将值读取为long long
。如何将这个long long
值安全地转换为unsigned int
?
答案 0 :(得分:3)
为避免缩小转换错误,使用更安全-numeric_cast
numeric_cast易于添加到项目中,因为使用的增强代码仅是标头-无需构建增强。 这样,您就可以在运行时失去精度的情况下捕获异常。
如果安全性不是主要优先级(或者您有信心unsigned int总是足以包含long long值),则比使用安全性更重要:
static_cast<unsigned int>(llval)
答案 1 :(得分:2)
如何在C / C ++中将long long转换为unsigned int?
测试该值是否在范围内。
C解决方案:
#include <stdbool.h>
#include <limits.h>
// return error status
bool ll_to_u(unsigned *y, long long x) {
if (x < 0) {
return true;
}
#if LLONG_MAX > UINT_MAX
if (x > UINT_MAX) {
return true;
}
#endif
*y = (unsigned) x;
return false;
}
答案 2 :(得分:1)
如何将这个
unsigned int
值安全地转换为long long input = ... if (input < 0) throw std::runtime_error("unrepresentable value"); if (sizeof(unsigned) < sizeof(long long) && input > static_cast<long long>(std::numeric_limits<unsigned>::max())) throw std::runtime_error("unrepresentable value"); return static_cast<unsigned>(input);
?
赞:
{{1}}
如果您不喜欢异常,则可以使用其他选择的错误处理方法。