我想将unsigned char *转换为char *,打印该值并再次将char *转换为unsigned char *。我怎么能这样做?
答案 0 :(得分:2)
字节数组可以解释为char
,unsigned char
或signed 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);
但我同意评论者的意见,如果可能的话应该避免这种演员。