uint8_t iostream behavior

前端 未结 3 2187
误落风尘
误落风尘 2020-12-10 12:48

Abstract: I was expecting the code: cout << uint8_t(0); to print \"0\", but it doesn\'t print anything.

Long version: When I try to stream uint8_t objects

3条回答
  •  春和景丽
    2020-12-10 13:11

    As others have pointed out, uint8_t is streamed as an unsigned char. I've sometimes made use of bit fields from integer types that are streamed as, well, integers, to avoid having to cast or overload operator<<, but only when it doesn't waste space, like in the Pos struct below:

    #include 
    
    struct WasteAbyte {
        unsigned short has_byte_range:8;
    };
    
    struct Pos {
        unsigned short x:8;
        unsigned short y:8;
    };
    
    int main() {
        WasteAbyte W = {255};
    
        ++W.has_byte_range;
    
        std::cout << W.has_byte_range << std::endl;
    
        std::cout << sizeof(WasteAbyte) << std::endl;
        std::cout << sizeof(Pos) << std::endl;
    
        return 0;
    }
    

    Output:

    0
    2
    2
    

提交回复
热议问题