0

私は学校のプロジェクトをやっていて、この問題が起こりました。ちなみに、図書館は使えません。

int変数をchar配列に変換する方法は?私はこれを試しましたが、うまくいきませんでした。他の多くのことを試しましたが、魔法でさえもうまくいきません...

char *r = malloc(sizeof(char*));
int i = 1;
r[counter++] = (char) i;

誰かが私を助けることができますか?お時間をいただきありがとうございます。

4

7 に答える 7

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.
于 2013-03-24T00:58:57.217 に答える
0

精度を落としてもよろしいですか?charは通常8ビットで、intは通常それ以上です。255を超えるint値は、255を法とする値に変換されます。intを保持するのに必要な数のcharにintを変換する場合を除きます。

あなたのタイトルはそれを言っているように見えますが、これまでのところ答えはありません。

もしそうなら、あなたはcharの配列を宣言する必要がsizeof(int) / sizeof(char)あります。それは何度もループし、に移動i >> 8r[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;
}
于 2013-03-24T01:11:27.310 に答える
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配列の長さはあまり気にしなかったので、賢明に選択することをお勧めします。

于 2013-03-24T01:46:44.257 に答える
0

これを試すこともできます:

char *r = malloc(sizeof(char));
char *s = (char*)&i; 
r[counter++] = s[0];

s[0]これはもう 1 つのおもしろい方法で、s[1]、 などを使用して完全な int にアクセスできます 。

于 2013-03-24T01:01:14.647 に答える
0

代わりにa を使用できます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 は通常、null で終わる文字列にはならないか、そうなる可能性がありますが、長さは 4 未満です。

于 2013-03-24T01:18:59.717 に答える
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.
于 2013-03-24T01:05:06.707 に答える