0

无论如何,我可以将 char 和 int 组合成 C 中的 char* 吗?

总是只有一个字符和一个 4 位整数。

例如:我有 char "A",我有一个 int 1234。如何将它们组合成一个 char*,它指向一个带有 "A1234" 的 char 数组?

CID[0] = character 
CID[1] = ID & 0xff;
CID[2] = (ID >> 8) & 0xff;
CID[3] = (ID >> 16) & 0xff;
CID[4] = (ID >> 24) & 0xff;

假设字符是一个正确的字符,其值为“A”,而 ID 是一个正确的 int,其值为“1234”。

4

4 回答 4

9

基本字符串格式:

char buf[32];
snprintf(buf, sizeof(buf), "%c%d", 'A', 1234);
于 2012-12-21T17:50:25.993 回答
3

具有sprintf/snprintf功能。

示例sprintf

char *a = malloc(32);  // allocate enough memory and check malloc's return value 
sprintf(a, "%c%d", my_char, my_int);
于 2012-12-21T17:50:22.517 回答
2

要复制您在问题中写的内容并摆脱该s(n)printf问题:

CID[0] = character 
CID[1] = ID / 1000;
CID[2] = (ID / 100) % 10;
CID[3] = (ID / 10) % 100;
CID[4] = ID % 10;

如果你的编译器足够聪明并且你的处理器有一个好的除法器单元,它肯定会比调用sprintf.

编辑:对编译器的智能性和分隔符的优点进行一点说明。编译器通常能够使用移位、加法、减法和避免除法指令将常量乘法和除法转换为替代代码,即使在最快的处理器中也需要一些时间。此处显示的显式转换也将在内部进行sprintf(但以更通用的方式)。

于 2012-12-21T18:01:22.423 回答
1
#include <stdio.h>

buf [SIZE];
sprintf(buf, "%c%d", c, d);

什么时候是你的 charcdint。

不过要小心缓冲区溢出。H2CO3 的答案显示了一种更安全的选择。

于 2012-12-21T17:51:24.517 回答