2017-08-09 13 views
2

以下では、符号なしのcharに数値15を2進数でエンコードし、intに変換します。しかし、intをint8_tに置き換えると、それ以上15は出力されません。私はなぜか分からない。 int8_tのサイズは8ビットではないので、charとよく一致するはずです(これは8ビットです)。あなたは(実際にあなたが表示されていないものを)を参照してください何バイナリで符号化された符号なしの文字を整数に変換する

#include <iostream> 
#include <string.h> 

int main() 
{ 

    unsigned char binValue = 0<<7 | 0<<6 | 0<<5 | 0<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0; // this is 15 in binary 

    int intValue = (int)binValue; 

    // memcpy(&intValue,&binValue,sizeof(int)); // Or this one 

    std::cout << intValue << std::endl; 

    return 0; 
} 
+0

'int8_t'が署名されている: は、印刷の途中でINTに変換し、小数など文字の種類(又はint8_t)を印刷します。 'uint8_t'を試してください。 「仕事が止まる」とはどういう意味ですか? –

+1

これはC++によく似ています –

+0

@ Jean-FrançoisFabre申し訳ありません。私は出力がもはや期待どおり15ではないことを意味しました。プログラムはまだコンパイルされて実行されます。 –

答えて

3

witn int8_tをfeededとき、文字として値を解釈し、ASCIIコード15は、デバッグコンソールに表示さ何かを残していない可能性があり、coutということです。

// _int8_t.h: 
#ifndef _INT8_T 
#define _INT8_T 
typedef __signed char  int8_t; 
#endif /* _INT8_T */ 

を、あなたのbinValue例えば、47にを変更した場合、その後、あなたが'/'を見るであろう次のように(例えば、鉱山用)環境がint8_tを定義するかもしれないことに注意してください。

int main() 
{ 
    unsigned char binValue = 0<<7 | 0<<6 | 1<<5 | 0<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0; 
    // changed to 47 for demonstration purpose 

    int8_t intValue = (int8_t)binValue; 

    std::cout << "as char:" << intValue << std::endl; 
    std::cout << "as decimal:" << (int)intValue << std::endl; 
    std::cout << "as decimal:" << +intValue << std::endl; 

    return 0; 
} 
関連する問題