代码之家  ›  专栏  ›  技术社区  ›  StellarVortex

如何用< < C++】输出无符号/符号char或< cSTnt> >类型作为整数

  •  2
  • StellarVortex  · 技术社区  · 16 年前

    我有模板流操作符(例如。 operator << (ostream &, std::vector <T>) unsigned char , int_least8_t

    问题:

    默认情况下,这些类型输出为 char (ASCII码)。 我只使用 烧焦 (或 wchar_t 如何使这些其他8位类型始终输出为 signed int unsigned int (号码)相反,即使来电者不知道类型?

    第一次尝试:

    operator << (ostream &, unsigned char) 里面有一个演员。 stream << static_cast <int> (value) 无符号字符 uint8_t 仍然以 烧焦 .

    unsigned/signed char 无法在重载中使用,因此我无法定义例如 operator << (ostream &, int_fast8_t)

    5 回复  |  直到 16 年前
        1
  •  2
  •   Björn Pollex    16 年前

    想到的一种方法是使用类型特征来定义每种类型的输出类型。你必须手工申报每一种类型。这些特征可以定义为一个模板结构,专门用于具有不同于数据类型本身的输出类型的每个数据类型:

    template< T >
    struct output_trait {
        typedef const T & output_type;
    }
    

    在您的接线员中,您可以写:

    std::cout << static_cast< output_trait< T >::output_type >( variable ) << std::endl;
    

    默认情况下,这不会强制转换,但对于 output_trait 是专门做演员的:

    template<>
    struct output_trait< unsigned char > {
        typedef unsigned int output_type;
    }
    
        2
  •  3
  •   salezica    16 年前

    这样想: chars , ints , doubles , longs

    如果要查看字符“a”后面的数字,只需指示程序将该内存块(对于包含“a”的内存块)视为数字。使用石膏。在这里:

    http://www.cplusplus.com/doc/tutorial/typecasting/

    看看有没有帮助!

        3
  •  1
  •   Merlyn Morgan-Graham    16 年前

    您可以简单地将其转换为:

    #include<iostream>
    
    int main()
    {
     uint8_t blah = 65;
     std::cout << static_cast<int>(blah) << "\n";
     return 0;
    }
    

    65岁

        4
  •  1
  •   Kiril Kirov    16 年前

    如果我理解你是对的。。输出如下:

    std::cout << ( unsigned int )char << '\n';
    

    或更多c++样式-使用静态转换,例如:

    int main()
    {
        char a = 'a';
        char b = 97;
        std::cout << static_cast< unsigned int >( a ) << '\n';
        std::cout << static_cast< unsigned int >( b ) << '\n';
        return 0;
    }
    

    二者都 std::cout 'a' : 97 ,第二个-只是价值 ,存储在b中。两者, a 和 b ,完全一样。

        5
  •  0
  •   bjoernz    16 年前

    std::cout << (unsigned int) container[index];
    
    推荐文章