如何将unsigned char *转换为char *

时间:2016-10-31 11:11:33

标签: c string

我想将unsigned char *转换为char *,打印该值并再次将char *转换为unsigned char *。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

字节数组可以解释为charunsigned 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;
}

答案 1 :(得分:0)

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

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

但我同意评论者的意见,如果可能的话应该避免这种演员。