将int值存储到char p[]索引中

将int值存储到char p[]索引中,c,arrays,char,int,C,Arrays,Char,Int,我被一个问题困住了。解决了我的问题。我在网上看了很多书,读了很多可能的解决方案,但似乎什么都不适合我 我有这个程序,我们把它叫做test.c #include <stdio.h> int main() { int x = 21345; char p[10]; p[0] = x; printf("%d\n", x); printf("%d", p[0]); return 0; } 我需要21345位于p[0],当我调用printf(

我被一个问题困住了。解决了我的问题。我在网上看了很多书,读了很多可能的解决方案,但似乎什么都不适合我

我有这个程序,我们把它叫做
test.c

#include <stdio.h>

int main() {

    int x = 21345;
    char p[10];
    p[0] = x;
    printf("%d\n", x);
    printf("%d", p[0]);
    return 0;
}
我需要
21345
位于
p[0]
,当我调用
printf(“%d”,p[0]);
它需要打印出
21345
,而不是
97

有什么帮助吗(

编辑:
看起来你们已经回答了,谢谢!更改为
intp[10]
可以解决这个问题。不过我还有另一个复杂问题,我还需要能够将字符串与int一起存储在
p
的索引中。我应该如何解决这个问题?

char
只存储1个字节的值,这样就可以得到输出。如果将
char p[10]
更改为
int p[10]
您将获得输出。

char
仅存储1个字节的值,以便获得该输出。如果将
char p[10]
更改为
int p[10]
您将获得输出。

字符
不够大,无法存储
21345
。因此,编译器只需要低8位,并将其放入
字符
,因此它变成
97
。当传递到printf时,它会将其转换回
int
,但最高位已经丢失。

字符
根本不足以存储
21345
。因此编译器只需要低8位并将其放入
char
,因此它变成
97
。当传递到printf时,它会将其转换回
int
,但最高位已经丢失。

A
char
int
的类型不同,并且在位数上不相同。您需要
int p[10];
才能工作。

字符
char
的类型与
int
的类型不同,位数也不相同。您需要
int p[10]
这样做。

您有一个带符号字符数组,每个字符占用1个字节,最大值为127,最小值为-128。现在x的值占用更多字节来表示,存在溢出,它会截断最左边的位

21345 has the binary representation:           0101 0011 0110 0001

now discard the leftmost byte and you get:               0110 0001   which is 97

您有一个带符号字符数组,每个字符占用1个字节,最大值为127,最小值为-128。现在x的值占用更多字节来表示,存在溢出,它会截断最左边的位

21345 has the binary representation:           0101 0011 0110 0001

now discard the leftmost byte and you get:               0110 0001   which is 97

您需要使用int数组而不是char 应该是

#include <stdio.h>

int main() {

    int x = 21345;
    int p[10];
    p[0] = x;
    printf("%d\n", x);
    printf("%d", p[0]);
    return 0;
}
如果你想对字符串使用相同的数组,可以使用二维字符数组 因为可以在4个字符的数组中正确存储整数值。 所以你需要使用p[10][4] 现在将int的每个字节存储在相应的char数组索引中

p[0][0] = (x >> (8*0)) & 0xff;
p[0][1] = (x >> (8*1)) & 0xff;
p[0][2] = (x >> (8*2)) & 0xff;
p[0][3] = (x >> (8*3)) & 0xff;

您需要使用int数组而不是char 应该是

#include <stdio.h>

int main() {

    int x = 21345;
    int p[10];
    p[0] = x;
    printf("%d\n", x);
    printf("%d", p[0]);
    return 0;
}
如果你想对字符串使用相同的数组,可以使用二维字符数组 因为可以在4个字符的数组中正确存储整数值。 所以你需要使用p[10][4] 现在将int的每个字节存储在相应的char数组索引中

p[0][0] = (x >> (8*0)) & 0xff;
p[0][1] = (x >> (8*1)) & 0xff;
p[0][2] = (x >> (8*2)) & 0xff;
p[0][3] = (x >> (8*3)) & 0xff;

你能把字符p[10];改成int p[10];?在
#include
中检查
char\u MAX
,这行得通,斯蒂奇博士。如果我把它改成
int p[10]
,我能把字符串连接到
p
的索引中吗?你能把字符p[10];改成int p[10]在
#include
中检查
CHAR_MAX
是否有效,Stitch博士。如果我将其更改为
int p[10]
,我是否能够将字符串连接到
p
的索引中?这确实解决了我发布的问题!如果我将其更改为
int p[10]
,我能把串接字符串放到
p
的索引中吗?你说的串接字符串是什么意思?你有一个你想做的例子吗?这确实解决了我发布的问题!如果我把它改成
int p[10]
,我能把串接字符串放到
p
的索引中吗?你说的串接字符串是什么意思?你有没有一个例子来说明你想做什么?