繁体   English   中英

在 C++ 中通过零扩展将 char 转换为 int

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM