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);

结果只是一个带有无符号字符数组的结构。

编辑:

            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;

如果pch2不是 null 终止程序将崩溃,如果幸运的话,当您使用 时strlen,您需要在使用打印之前先将其终止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 指针转换为 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 回答
1

尝试这样的事情: -

 char *ph2;
 unsigned char *new_pointer = (unsigned char*) ph2;
于 2012-11-25T17:58:11.477 回答
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 回答