C++ 如何在C/C++;

C++ 如何在C/C++;,c++,c,type-conversion,C++,C,Type Conversion,我正在使用jannson库读取JSON文件。我正在读取的键有一个类型为unsigned int的值。Jannson无法识别无符号int。因此,我将该值读取为long。如何将此long-long值安全地转换为无符号int?为避免缩小转换错误,使用- 数值转换很容易添加到项目中,因为使用的boost代码只是头文件,不需要构建boost。 这样,您可以在运行时丢失精度的情况下捕获异常 如果安全性不是主要优先级(或者您确信无符号int始终足以包含long-long值),请使用: static_cast&

我正在使用jannson库读取JSON文件。我正在读取的键有一个类型为
unsigned int
的值。Jannson无法识别
无符号int
。因此,我将该值读取为
long
。如何将此
long-long
值安全地转换为
无符号int

为避免缩小转换错误,使用-

数值转换很容易添加到项目中,因为使用的boost代码只是头文件,不需要构建boost。 这样,您可以在运行时丢失精度的情况下捕获异常

如果安全性不是主要优先级(或者您确信无符号int始终足以包含long-long值),请使用:

static_cast<unsigned int>(llval)
static_cast(llval)
如何将此
long
值安全地转换为
无符号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);
long输入=。。。
如果(输入<0)
抛出std::runtime_错误(“不可表示的值”);
if(sizeof(unsigned)静态\u转换(标准::数值\u限制::max())
抛出std::runtime_错误(“不可表示的值”);
返回静态_cast(输入);
如果您不喜欢异常,可以使用您选择的任何其他错误处理方法

如何在C/C++中将long-long转换为无符号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;
}
#包括
#包括
//返回错误状态
bool ll_to_(无符号*y,长x){
if(x<0){
返回true;
}
#如果LLONG_MAX>UINT_MAX
如果(x>UINT_MAX){
返回true;
}
#恩迪夫
*y=(无符号)x;
返回false;
}

由于
long-long
可能包含负数,而
无符号int
可能包含过大的数字,因此您可能无法执行此操作。你使用C还是C++?选择一个。你如何定义“安全”?如果该值肯定在<代码>未签名的int 范围内,那么只需转换它就可以安全了。@ NigOLBOLAS C++确实有其他的选项,如代码“STATICEXCAST > C没有。”但是C++更喜欢诸如“代码> STATICORCAST ”这样的东西,这样编译器就可以标记出错误的转换。通常情况下,C不在乎,它只做所说的事情,所有丑陋的截断错误都会发生<代码>(int)FulATX完全有效,即使它对于各种各样的值产生了未定义的行为。@ NICOLBOLAS C++有其他选项,如“代码> GSL::Simule和 GSL::SimulasCase,在这种情况下,而在 C<代码>中,将有不同的做法。参考:sizeof(unsigned)\if是多余的吗?即使它不是真的,测试仍然可以正常工作。@M.M true,但是一些编译器会发出警告。
#if LLONG_MAX>UINT_MAX
避免了这种情况。是C解决方案所必需的?@Myshkin
添加了。