2016-10-31 6 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 charまたはsigned charの配列として解釈できます。

Cライブラリのほとんどの文字列関数は、タイプchar *またはconst char *の引数をとり、そのようなポインタによって指される配列はNULL終止符(NULL文字定数として書かれた文字列'\0')。

unsigned charの配列にNULL終止符が付いている限り、これらのライブラリ関数に渡すときは、そのアドレスを(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; 
} 
関連する問題