【发布时间】:2019-06-04 00:41:53
【问题描述】:
我正在使用 jannson 库从 JSON 文件中读取数据。我正在阅读的键具有unsigned int 类型的值。 Jannson 无法识别 unsigned int。因此,我将值读取为long long。如何安全地将这个 long long 值转换为 unsigned int?
【问题讨论】:
-
您可能无法这样做,因为
long long可能会为unsigned int保存负数和较大的数字。您使用的是 C 还是 C++?选择一个。 -
如何定义“安全”?如果该值肯定在
unsigned int的范围内,那么只需转换它就安全了。 -
@NicolBolas C++ 确实有其他 C 没有的转换选项,例如
static_cast。 -
@NicolBolas 我不是在争论定义明确的角度,你就在那儿,但是 C++ 更喜欢
static_cast这样的东西,以便编译器可以标记错误的转换。通常 C 不在乎,它只是按照所告诉的去做,各种丑陋的截断错误可能而且将会发生。(int) floatX是完全有效的,即使它对范围很广的值产生未定义的行为。 -
@NicolBolas C++ 有其他选项,例如
gsl::narrow和gsl::narrow_cast,在这种情况下会被推荐,而在C中会有所不同。参考:stackoverflow.com/questions/52863643/…
标签: c++ c type-conversion