c++ - 在 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;
足够好,是吗?
解决方案
说得特别清楚没有坏处:
return int((unsigned char)c);
这样你就可以准确地告诉编译器你想要什么:包含 char 值的 int,读取为无符号。所以 char 255 将变为 int 255。
推荐阅读
- .htaccess - 使用 URL 中的数字重定向
- javascript - 为什么当我使用空购物车登录时,.map 出现错误?
- amazon-web-services - 当文件中明确指定 executionRoleArn 时,为什么我会收到关于未指定的错误?
- typescript - 如何将 typescript 编译成带有类型注释和接口导入的原始 ts 文件
- python - 根据出现的顺序在 Python 中对列表进行编码
- angular-material - Angular Material:如何结合 ngIf、aria-label 和 i18n?
- swift - 如何快速从核心数据中删除对象
- azure - 为什么使用 Azure Active Directory 调用我的 WebAPI 的 SPA 收到“此请求的授权已被拒绝。”?
- android - 显示来自这个特定 url 的图像
- sqlite - 如何在 ChangeNotifier 中使用 Futures?