首页 > 解决方案 > 在 C++ 中通过零扩展将 char 转换为 int

问题描述

我想写一个函数

int char_to_int(char c);

通过零扩展值将给定的 char 转换为 int。因此,如果 char 有 N 位而 int 有 M 位,M >= N,则 int 值的 MN 个最高有效位应该为零,并且 int 值的 N 个最低有效位应该与 char 值的位匹配。

这似乎是一项简单的任务,但我不确定如何仅依靠标准行为来编写它。没有 UB,没有实现定义的行为。不依赖于 char 是 8 位,int 是 32 位,char 是无符号的,以及我做出的任何其他常见假设都不能得到标准的保证。

我想知道这一点的原因是,我过去曾多次进行过这种转换,但最近我开始意识到 C++ 对其数据类型提供的有限保证。所以现在我很好奇什么是正确的、符合标准的方法。

我不认为

return (int) c;

足够好,是吗?

标签: c++castingtype-conversionundefined-behaviorstandards-compliance

解决方案


说得特别清楚没有坏处:

return int((unsigned char)c);

这样你就可以准确地告诉编译器你想要什么:包含 char 值的 int,读取为无符号。所以 char 255 将变为 int 255。


推荐阅读