2016-10-31 1059 views
0

我想将unsigned char *转换为char *,打印该值并再次将char *转换为unsigned char *。我怎样才能做到这一点 ?如何将unsigned char *转换为char *

+4

强制转换是通过在C.铸造完成,但是,铸件应避免使用,除非绝对必要的。你为什么需要这样做?你的问题应该提供更多的背景。 – user694733

回答

0
unsigned char x = 0xFF; 
unsigned char *p = &x; 

printf("Signed value - %d\n", *((char *)p)); 
printf("Unsigned value - %u\n", *p); 

但我同意评论者,如果可能的话应该避免这样的铸造。

+0

我没有得到downvote的原因。你可以解释吗? – dkolmakov

2

字节数组可以被解释为数组char,unsigned charsigned char

大部分从C库字符串函数采取char *类型或const char *的参数,并假设阵列指向这样的指针有一个空终止(指示结束时,如果该字符串,通常写为一个空字符常数的空字节'\0')。

只要您的unsigned char数组具有空终止符,将它的地址作为(char *)(const char *)传递给这些库函数时是无害的。

例如:

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    unsigned char buf[256]; 
    char *p; 

    for (size_t i = 0; i < sizeof(buf); i++) { 
     buf[i] = (i + 1) & 255; 
    } 
    printf("length of array: %d\n", (int)strlen((char *)buf)); 
    printf("complete character set: >>>%s<<<\n", (char *)buf); 

    p = (char *)buf; 
    printf("char type is %s by default\n", p[128] < 0 ? "signed" : "unsigned"); 
    return 0; 
} 
相关问题