如何在C中将ASCII字符转换为int

eyh26e7m  于 2023-02-15  发布在  其他
关注(0)|答案(8)|浏览(412)

在C中如何将ASCII字符转换为int型?

vfwfrxfs

vfwfrxfs1#

关于:

int a_as_int = (int)'a';
btxsgosb

btxsgosb2#

我同意Ashot和Cwan,但是也许你喜欢把一个像“7”这样的ASCII密码转换成一个像7这样的整数?
那么我建议:

char seven = '7';
int i = seven - '0';

或者,你得到了警告,

int i = (int) (seven - '0');

评论后更正,谢谢。

3df52oht

3df52oht3#

您是否正在搜索:

int c = some_ascii_character;

或仅转换而不赋值:

(int)some_ascii_character;
ar7v8xwq

ar7v8xwq4#

使用ASCIIto Integer atoi()函数,该函数接受字符串并将其转换为整数:

#include <stdlib.h>

int num = atoi("23"); // 23

如果字符串包含小数,则数字将被截断:

int num = atoi("23.21"); // 23
o3imoua4

o3imoua45#

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类型)。

jtoj6r0c

jtoj6r0c6#

你是指ASCII序数值吗?尝试如下类型转换:

int x = 'a';
mfpqipee

mfpqipee7#

就像其他人告诉你的那样,你可以直接转换它...除非你的意思是“我怎样才能把一个ASCII扩展字符转换成它的UTF-16或UTF-32值”。这是一个完全不同的问题(至少一样好)。如果我没记错的话,如果你只使用“纯”C,这是一个相当困难的问题。那么你可以从这里开始:https://stackoverflow.com/questions/114611/what-is-the-best-unicode-library-for-c/114643#114643
(for ASCII扩展我指的是ASCII集的许多“扩展”之一。基本ASCII集的0-127个字符可以直接转换为Unicode,而128-255个字符则不能。)例如,ISO_8859-1 http://en.wikipedia.org/wiki/ISO_8859-1是7位ASCII集的8位扩展,或(相当有名的)代码页437和850。

mmvthczy

mmvthczy8#

这在C99标准库中是不可能的,除非您手动编写从字符常量到相应ASCII int值的Map。

C语言中的字符常量(如'a')不一定是ASCII。
C99只对那些常量做了一些保证,例如digits be contiguous
ASCII一词只出现在C99 N1256 standard draft的脚注中,脚注73说:
在使用七位US ASCII字符集的实现中,打印字符是其值位于从0x 20(空格)到0x 7 E(代字号)的那些字符;控制字符是其值位于从0(NUL)到0x 1F(US)的那些字符和字符0x 7 F(DEL)。
这意味着ASCII不是唯一的可能性

相关问题