7

char ポインターを unsigned char var に変換したいのですが、キャストするだけでできると思っていましたが、うまくいきません。

char * pch2;
//Code that puts something in pc2
part1 = (unsigned char) pch2;

私はこれにコードを持っています:

result.part1 = (unsigned char *) pch2;
printf("STRUCT %s\n",result.part1);

結果は、unsigned char 配列を持つ単なる構造体です。

編集:

            pch2 = strtok( ip, "." );

            while( pch2 != NULL ){
                printf( "x %d x: %s\n", i, pch2 );
                pch2[size-1] = '\0';

                if(i == 1)
                    result.part1 = (unsigned char *) pch2;
                if(i == 2)
                    result.part2 = (unsigned char *) pch2;
                if(i == 3)
                    result.part3 = (unsigned char *) pch2;
                if(i == 4)
                    result.part4 = (unsigned char *) pch2;
                i++;
                pch2 = strtok (NULL,".");
            }   
            printf("STRUCT %c\n",result.part1);

構造:

typedef struct
{
    unsigned char part1;
    unsigned char part2;
    unsigned char part3;
    unsigned char part4;
} res;
4

5 に答える 5

3

あなたは忘れunsigned charないでキャストしますunsigned char**

part1 = (unsigned char*) pch2;

が null で終了していない場合pch2、運が良ければ を使用するとプログラムがクラッシュするためstrlen、 を使用して印刷する前に最初に null で終了する必要がありますpch2。代わりにこれを試してください。

pch2[size-1] = '\0';  /* note single quote */
result.part1 = (unsigned char *) pch2;

更新:次のように構造を定義します。

typedef struct
{
    const char *part1;
    const char *part2
    const char *part3;
    const char *part4;
} res;

そして、まったくキャストせずにそれに割り当てます:

result.part1 = pch2;
于 2012-11-25T17:56:34.843 に答える
1

このようなことを試してください:-

 char *ph2;
 unsigned char *new_pointer = (unsigned char*) ph2;
于 2012-11-25T17:58:11.477 に答える
1

char ポインターを unsigned char var に変換したい

本気ですか?char へのポインタを unsigned char に変換しても、何の効果もありません。値は 1 バイトに切り捨てられ、意味がありません。ポインターを逆参照して、それが指す値を取得したい場合は、次のようにする必要があります。

unsigned char part1 = (unsigned char)*pch2;

編集後、それpart1が文字配列であることがわかります。使用後にプログラムがクラッシュした場合は、おそらくpch2間違って入力します。もしかして、'\0'ターミネーターを忘れていませんか?

編集:

ご覧のとおり、必要なすべての情報を含めて質問に回答する方がはるかに優れています。を使用する必要がありますstrtokか? これでいいでしょうか?

    res result;
    char* ip = "123.23.56.33";

    sscanf(ip, "%hhu.%hhu.%hhu.%hhu", &result.part1, &result.part2, &result.part3, &result.part4);
于 2012-11-25T18:05:23.367 に答える
1

あなたはこれをしたい:

part1 = (unsigned char*) pch2;

それ以外の:

part1 = (unsigned char) pch2;
于 2012-11-25T17:56:58.730 に答える
0

問題が見つかりました。char pch2 を unsigned int にキャストするのを忘れていたので、%u で出力できます。コード:

unsigned int temp;

temp = atoi(pch2);

result.part1 = temp;
printf("Struct: %u\n",result.part1);

助けてくれてありがとう!

于 2012-11-25T21:32:50.403 に答える