【发布时间】:2011-07-16 09:01:33
【问题描述】:
如何在 C 中将 ASCII 字符转换为 int?
【问题讨论】:
-
C 没有“ascii 字符”数据类型,所以这个问题没有意义。
-
这是一个模棱两可的话题,意味着 1)'1' 到 1 或 2)'@' 到 64;我正在寻找第一个
如何在 C 中将 ASCII 字符转换为 int?
【问题讨论】:
怎么样:
int a_as_int = (int)'a';
【讨论】:
你在寻找这个吗:
int c = some_ascii_character;
或者只是转换而不分配:
(int)some_aschii_character;
【讨论】:
我同意 Ashot 和 Cwan,但也许您想将 '7' 之类的 ascii 密码转换为 7 之类的 int?
那我推荐:
char seven = '7';
int i = seven - '0';
或者,也许你会收到警告,
int i = (int) (seven - '0');
在 cmets 后更正,谢谢。
【讨论】:
'7' 是 int)转换为较小的类型(char)。跨度>
使用 ASCII to Integer atoi() 函数接受字符串并将其转换为整数:
#include <stdlib.h>
int num = atoi("23"); // 23
如果字符串包含小数,数字将被截断:
int num = atoi("23.21"); // 23
【讨论】:
C 中的 char 值可以隐式转换为 int。例如,char c; ... printf("%d", c) 打印 c 的十进制 ASCII 值,int i = c; 将 c 的 ASCII 整数值放入 i。您也可以使用(int)c 显式转换它。如果你的意思是别的,比如如何将 ASCII 数字转换为 int,那就是 c - '0',它隐式地将 c 转换为 int,然后减去 '0' 的 ASCII 值,即 48(在 C , '0' 等字符常量是 int 类型,而不是 char,由于历史原因)。
【讨论】:
你的意思是 ASCII 序数值?尝试像这样进行类型转换:
int x = 'a';
【讨论】:
正如其他人告诉您的那样,您可以直接转换它...除非您的意思是“我如何将 ASCII 扩展字符转换为其 UTF-16 或 UTF-32 值”。这是一个完全不同的问题(至少同样好)。如果我没记错的话,如果你只使用“纯”C,那么你可以从这里开始:https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643
(对于 ASCII 扩展,我的意思是 ASCII 集的众多“扩展”之一。基本 ASCII 集的 0-127 个字符可以直接转换为 Unicode,而 128-255 则不能。)。例如 ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1 是 7 位 ASCII 集或(非常著名的)代码页 437 和 850 的 8 位扩展。
【讨论】:
使用 C99 标准库是不可能的,除非您手动编写从字符常量到相应 ASCII int 值的映射。
C 中的字符常量,如 'a',不保证是 ASCII。
C99 仅对这些常量做出一些保证,例如那个digits be contiguous。
ASCII这个词只出现在C99 N1256 standard draft的脚注中,脚注173)说:
在使用七位 US ASCII 字符集的实现中,打印字符是那些 其值从 0x20(空格)到 0x7E(波浪号);控制字符是那些 值从 0 (NUL) 到 0x1F (US),字符 0x7F (DEL)。
暗示ASCII不是唯一的可能性
【讨论】:
(int)'a' == 0x61,并解释我的报价所指的是什么?