我正在做一个学校项目,这个问题出现了。 顺便说一句,我不能使用图书馆。
如何将int变量转换为char数组? 我试过这个,但它没有用,尝试了很多其他的东西,甚至魔法都不起作用......
char *r = malloc(sizeof(char*));
int i = 1;
r[counter++] = (char) i;
有人能帮助我吗? 谢谢你的时间。
答案 0 :(得分:1)
在您的代码中,您应该分配char
大小而不是char *
。请尝试使用此代码段
char *r = malloc(sizeof(char) * N); // Modified here
int i = 1;
r[counter++] = i & 0xff; // To store only the lower 8 bits.
答案 1 :(得分:0)
你也可以试试这个:
char *r = malloc(sizeof(char));
char *s = (char*)&i;
r[counter++] = s[0];
这是另一个有趣的方法,它允许您访问完整的int:
s[0]
,s[1]
等等......
答案 2 :(得分:0)
如果您无法使用该库,则无法使用malloc
。
但这会奏效:
int i = 0;
char *p = (char *)&i;
p[0] = 'H';
p[1] = 'i';
p[2] = '!';
p[3] = '\0';
printf("%s\n", p);
假设您的int
为32位或更高(并且您的char
为8)。
然后如果你有:
int i[100];
您可以将其视为char
的数组,其大小等于sizeof (i)
。即。
int i[100];
int sz = sizeof(i); // probably 400
char *p = (char *)i; // p[0] to p[sz - 1] is valid.
答案 3 :(得分:0)
你介意失去精确度吗? char通常是8位,int通常更多。超过255的任何int值都将转换为其模数255 - 除非您想将int转换为保持int所需的字符数。
你的头衔似乎或者说,但到目前为止,答案都没有。
如果是这样,你需要声明一个sizeof(int) / sizeof(char)
的char数组并循环多次,将i >> 8
移动到r[looop_var]
。除非你的老师告诉你这样做,否则根本不需要malloc。在这种情况下,不要忘记处理malloc失败。
让我们说一些类似的东西(我正在编写这个,不用编译它,所以要小心)
int numChars = sizeof(int) / sizeof(char);
char charArry[numChard]; // or malloc() later, if you must (& check result)
int convertMe = 0x12345678;
int loopVar;
for (loopVar = 0; loopvar < numChars)
{
charArry[loopVar ] = convertMe ;
convertMe = convertMe >> 8;
}
答案 4 :(得分:0)
您可以使用union
代替。假设sizeof int == 4
,
typedef union {
int i;
char[4] cs;
} int_char;
int_char int_char_pun;
int_char_pun.i = 4;
for (int i = 0; i < 4; i++) {
putchar(int_char_pun.cs[i]);
}
小心; int_char.cs通常不是以空字符结尾的字符串,或者它可能是,但长度为&lt; 4。
答案 5 :(得分:0)
如果您不想包含数学库:
unsigned long pow10(int n);
void main(){
char test[6] = {0};
unsigned int testint = 2410;
char conversion_started = 0;
int i=0,j=0;float k=0;
for(i=sizeof(test);i>-1;i--){
k=testint/pow10(i);
if(k<1 && conversion_started==0) continue;
if(k >= 0 && k < 10){
test[j++]=k+0x30;
testint = testint - (k * pow10(i));
conversion_started=1;
}
}
test[j]=0x00;
printf("%s",test);
}
unsigned long pow10(int n){
long r = 1;
int q = 0;
if(n==0) return 1;
if(n>0){
for(q=0;q<n;q++) r = r * 10;
return r;
}
}
注意:我对char数组的长度并不在意,所以你最好明智地选择它。
答案 6 :(得分:0)
嗯......下面的代码出了什么问题
char *r = malloc(sizeof(char) * ARR_SIZE);
int i = 1;
sprintf(r,"%d",i);
printf("int %d converted int %s",i,r);
它现在适合你吗