如何在C / C ++中将long long转换为unsigned int

时间:2019-06-04 00:41:53

标签: c++ c type-conversion

我正在使用jannson库从JSON文件读取。我正在读取的键的值为unsigned int类型。詹森(Jannson)无法识别unsigned int。因此,我正在将值读取为long long。如何将这个long long值安全地转换为unsigned int

3 个答案:

答案 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}}

如果您不喜欢异常,则可以使用其他选择的错误处理方法。