[英]Cast char to int by zero extending in C++
我想写一个 function
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;
足够好,是吗?
说得特别清楚没有坏处:
return int((unsigned char)c);
这样你就可以准确地告诉编译器你想要什么:包含 char 值的 int,读取为无符号。 所以 char 255 将变为 int 255。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.