简单的整数转字符数组转换

8

我有一个简单的问题

如何将整数(取值范围为0-8)简单地转换为字符,例如在C中的char[2]?

谢谢


4
为什么需要2个char?请给出一个输入和相应输出的示例。 - Oliver Charlesworth
我不明白为什么你需要“.”。 - user319824
6个回答

30
main()
{
  int i = 247593;
  char str[10];

  sprintf(str, "%d", i);
// Now str contains the integer as characters
}

希望这对你有所帮助。


1
始终使用 snprintfsnprintf_s 并传递缓冲区大小以避免缓冲区溢出和潜在的安全问题,即使对于像这样的最简单情况也是如此。除非您知道输出大小,否则使用 sprintf 是一种安全问题。 - aberaud

4
#include<stdio.h> 
#include<stdlib.h>
#include<string.h>
void main()
{
int a = 543210 ;
char arr[10] ="" ;

itoa(a,arr,10) ;   // itoa() is a function of stdlib.h file that convert integer 
                   // int to array itoa( integer, targated array, base u want to             
                   //convert like decimal have 10 

for( int i= 0 ; i < strlen(arr); i++)   //  strlen()   function in string file thar return string length
  printf("%c",arr[i]);

}

虽然 itoa 很容易使用并且被许多编译器支持,但是正如这里所指出的那样,它似乎在 ANSI-C 中没有定义。 - Samuel Li

1
如果你想将一个在0-9范围内的整数转换为字符,通常可以编写类似以下代码:
int x;
char c = '0' + x;

现在,如果你想要一个字符串,只需添加一个终止符 '\0' 即可:
char s[] = {'0' + x, '\0'};

请注意:
  1. 必须确保int在0-9范围内,否则会失败,
  2. 仅当数字的字符代码连续时才有效。这在绝大多数基于ASCII的系统中是正确的,但不能保证在所有情况下都是如此。

1
实际上,C标准保证 '0''9' 的表示是连续且递增的。 - Oliver Charlesworth

1
请使用这个。注意,如果i大于9,则需要一个包含超过2个元素的字符数组,以避免缓冲区溢出。
char c[2];
int i=1;
sprintf(c, "%d", i);

0

你无法在“标准”C中真正实现它,因为int和char的大小并不固定。假设你正在使用Intel PC上的Windows或Linux编译器...

int i = 5;
char a = ((char*)&i)[0];
char b = ((char*)&i)[1];

Remember of endianness of your machine! And that int are "normally" 32 bits, so 4 chars!

但你可能是想要将数字转换为字符串,所以可以忽略这个回复 :-)


0
char[] s = {'\0', '\0' ,'\0','\u001A'}; //s[3]=26 Int32 Data = BitConverter.ToInt32(s);//now Data=26
char[] H = new char[4]; H[3] = (char)Data; //now H == s

问题要求提供C代码。12年前。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接