1

キー文字列を使用して C で文字列をエンコードしたいと考えています。encodeMSG関数は int 配列を返すため、次のようになります
intArr[i] = the int value of msg[i] + the int value of key[i]
キー文字列の長さがメッセージ文字列よりも短い場合は、先頭に戻る必要があります (サイクル)。

複雑すぎないように見えますが、これをどのように行うべきかわかりません。また、のような単純なキャスト
を使用する必要があるかどうかもわかりませんでした。atoi(msg + i)(int)(*(msg + i))

int *encodeMSG(char *msg, char *key)
{
   int i, msgLen;
   int *encodedArr = (int *)malloc(strlen(msg) * sizeof(int));
   char *keyBackup = key;
   msgLen = (strlen(msg));

   for (i = 0; i < msgLen; ++i)
   {
       if (*(key + i) == '\0')
           key = keyBackup;

       *(encodedArr + i) = *(msg + i); //creating an integer-represented array of the char array [msg]
       *(encodedArr + i) += *(key + i); //adding the [key] array integer values to the integer-represented array of the message
   }

   return encodedArr;
}
4

3 に答える 3

1

これを試して:

int *encodeMSG(char *msg, char *key)
{
    char *key0 = key;
    int *result = (int*) malloc( sizeof(int)*(strlen(msg)+1) );
      // +1 to include the final zero of msg
    int *result0 = result;
    while( *msg ) // i assume it's zero-terminated
    {
        *result++ = ((int)*msg) + ((int)*key);
        ++msg;
        ++key;
        if(!*key)key=key0; // reset it to the beginning of the key
    }
    *result = 0; // the final zero
    return result0;
}

これは ascii 値を直接使用します。atoi はここでは役に立ちません。*msg は実際の char msg が指すことに注意してください。msg は 0 で終了するため、文字列の末尾は false の 0 です。同じことが *key にも当てはまり、*key == 0 (または !*key) の場合は、キー フレーズの先頭にリセットするだけです。

ちなみに、これは msg の chars よりも 1 多い int を持つ int[] を返します。最後の int はゼロです。

于 2012-10-06T14:22:36.497 に答える
0

ASCIIエンコーディングを探している場合は、次を使用してください。

for(i=0; i<msglen; ++i)
  res[i] = msg[i] + key[i%key_len]

ただし、文字に数字が含まれている場合は、その整数値を次のように取得できます。

int a = ch - '0'    // if ch = '5' then value of a comes out to be 5

「0」を減算しない場合、a の値は 53 (ASCII 値の「5」) になります。

于 2012-10-06T14:02:50.280 に答える
0

短いバージョン:

int *encodeMSG(char *msg, char *key)
{
  int *result = (int*) malloc( sizeof(int)*(strlen(msg)+1) );
  int key_len = strlen(key);

  for(size_t i=0, msglen=strlen(msg); i<msglen; ++i )
     result[i] = msg[i] + key[i % key_len];

   result[i] = 0; // the final zero
   return result;
 }
于 2012-10-06T18:27:52.570 に答える