Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将字符更改为整数?_C_Char_Type Conversion - Fatal编程技术网

C 如何将字符更改为整数?

C 如何将字符更改为整数?,c,char,type-conversion,C,Char,Type Conversion,我想将char数组的内容复制到int变量或数组中。例如,前五个值必须转到int数组(int x): 我在其他线程中看到,要将char更改为int,我需要执行以下操作: int x = a[0] - '0'; 还有其他方法吗 如果我想将值分为两个或两个以上的组,例如12、34和56,该怎么办 如果我不知道如何将它们保存为int,而是浮点数或其他类型,该怎么办?将字符串的适当大小部分复制到单独的缓冲区,然后使用或。将字符串的适当大小部分复制到单独的缓冲区,然后使用或。回答您的问题: 当然,还有其

我想将char数组的内容复制到int变量或数组中。例如,前五个值必须转到int数组(int x):

我在其他线程中看到,要将char更改为int,我需要执行以下操作:

int x = a[0] - '0';
还有其他方法吗

如果我想将值分为两个或两个以上的组,例如12、34和56,该怎么办


如果我不知道如何将它们保存为int,而是浮点数或其他类型,该怎么办?

将字符串的适当大小部分复制到单独的缓冲区,然后使用或。

将字符串的适当大小部分复制到单独的缓冲区,然后使用或。

回答您的问题:

  • 当然,还有其他的方法。您显示的方式将ASCII值转换为它表示的数字,但还有其他方式
  • 读入所需的字符数,将每个字符转换为一个数字,然后从这些数字构造整数,如
    number=10*digit1+digit2
  • 在构造整数后进行类型转换

回答您的问题:

  • 当然,还有其他的方法。您显示的方式将ASCII值转换为它表示的数字,但还有其他方式
  • 读入所需的字符数,将每个字符转换为一个数字,然后从这些数字构造整数,如
    number=10*digit1+digit2
  • 在构造整数后进行类型转换

您正处于写入轨道上,但是如果要转换为整数数组,则需要 应该使用类似

int x[MAX_ELEM];

for(int i =0; i<sizeof(a)/sizeof(char); i++)
{
   x[i] = a[i] -'0';
}
intx[MAX_ELEM];

对于(inti=0;i而言,您处于写入轨道上,但是如果您希望转换为整数数组,则 应该使用类似

int x[MAX_ELEM];

for(int i =0; i<sizeof(a)/sizeof(char); i++)
{
   x[i] = a[i] -'0';
}
intx[MAX_ELEM];

对于(int i=0;i您必须执行
int x=a[0]-“0”;
的原因是C中的字符编码。正在发生的是从字符中减去编码偏移量。下面是一个包含所有编码值的表:.So
int x=a[0]-“0”;
在您的情况下相当于
int x=49-48;
,它具有您所查找的正确值。使用
'0'
而不是
0
时,您使用的字符值为0

还有其他方法,但是这种方法很好用。要使用其他类型,只需在创建
int
后进行类型转换


John获得两位数的方法效果很好。在这里转载的是
number=10*digit1+digit2
你必须这样做的原因
int x=a[0]-“0”;
是因为C中的字符编码。发生的是从字符中减去编码偏移量。下面是一个包含所有编码值的表:。因此
int x=a[0]-“0”;
在您的情况下相当于
int x=49-48;
,它具有您所查找的正确值。使用
'0'
而不是
0
时,您使用的字符值为0

还有其他方法,但是这种方法很好用。要使用其他类型,只需在创建
int
后进行类型转换


John获得两位数的方法效果很好。在这里转载的是
number=10*digit1+digit2

你的问题要求太多了。你可以做你想做的任何事情,但你需要为每项任务编写一些代码。你能得到的最通用的方法是使用一个联合体。你可以一直这样做,例如
char a[]=“123456”;int b,c,d;sscanf(a,”%2d%3d%d“,&b,&c,&d);printf(“b=%d;c=%d;d=%d\n”,b,c,d);
@pmg但只要
strtol()
strtod(),你为什么要这么做呢
是否可用?@H2因为使用scanf,您可以在一次操作中给出长度并将其转换为12、34、56。@H2CO3:请参阅我的编辑。可能有理由避免复制周围的数字。使用
sscanf()
您可以将转换限制为2、3或任何数字。您的问题要求太多。您可以完成所有想要完成的任务,但您需要为每个任务编写一些代码。您可以得到的最通用的方法是使用Union。您可以始终使用,例如
字符a[]=“123456”;int b,c,d;sscanf(a),%2d%3d%d”,&b,&c,&d);printf(“b=%d;c=%d;d=%d\n”,b,c,d);
@pmg但是只要
strtol()
strtod(),为什么要这样做呢
是否可用?@H2因为使用scanf,您可以在一次操作中给出长度并将其转换为12、34、56。@H2CO3:请参阅我的编辑。可能有理由避免复制周围的数字。使用
sscanf()
可以将转换限制为2或3或任何数字。请参考
sizeof(char)
总是
1
,所以你甚至不需要把它说出来。是的,它不是必需的。谢谢。还有,为了你的信息,
sizeof(char)
总是
1
,所以你甚至不需要把它说出来。是的,它不是必需的。谢谢。@pmg谢谢,我很懒:P顺便说一下,你可以用
sscanf()发布你的解决方案
。正如您在评论中所说,
sscanf()
很难正确使用。我觉得用您的答案比用我的答案更安全(因为复制/粘贴程序员最终为我下一个假期乘坐的飞机编写了代码)。@pmg这的确是明智的做法。(很遗憾有复制粘贴程序员。)@pmg谢谢,我很懒:P顺便说一句,你可以用
sscanf()
发布你的解决方案。正如你在评论中所说,
sscanf()
很难正确使用。我觉得更安全(因为复制/粘贴程序员最终会为我下一次休假的飞机编写代码)用你的答案比用我的答案好。@pmg这的确是明智的。(可惜有复制粘贴程序员。)