0

とにかく、char と int を組み合わせて、C で char* にすることはできますか?

常に 1 つの char と 4 桁の int しかありません。

例: char "A" と int 1234 があります。それらを "A1234" の char 配列を指す char* に結合するにはどうすればよいですか?

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

character が値として「A」を持つ適切な char であり、ID が値として「1234」を持つ適切な int であると仮定します。

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

EDIT:コンパイラのスマートさとディバイダーの良さについて少し説明。コンパイラは、多くの場合、シフト、加算、減算、除算命令の回避を使用して、定数による乗算と除算を代替コードに変換できますが、最速のプロセッサでもまだ時間がかかります。ここに示されている明示的な変換は、 の内部でも行われますsprintf(ただし、より一般的な方法で)。

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

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

いつcdはあなたのcharとintです。

ただし、バッファオーバーフローに注意してください。H2CO3の答えは、より安全な代替案を示しています。

于 2012-12-21T17:51:24.517 に答える