vs不识别0b二进制格式_QTextStream输出流格式化

在项目中,经常需要对输出流进行格式化,那么今天小豆君就给大家介绍下输出流的格式化使用说明。

1 设置数字的输出格式

可以使用QTextStream类的setNumberFlags方法,指定数字的输出格式,它的标志位含义介绍如下:

  • QTextStream::ShowBase 指定以哪一种进制进行显示,16 ("0x"), 8 ("0"), or 2 ("0b")。
  • QTextStream::ForcePoint 如果输出类型是double或float,若这个数字不含小数部分,默认情况下不显示小数部分,若设置了该标志位,则显示小数部分(.)。
  • QTextStream::ForceSign 在输出的数字前面加上正负号,即"+"或"-"。
  • QTextStream::UppercaseBase 在进制指示中,使用大写字母表示,如"0X", "0B"。
  • QTextStream::UppercaseDigits 使用大写字母来表示10到35位数字,而不是小写。例如16进制中的a-f都用大写字母表示,或者科学计数法中的e使用大写E。
int main()
{
    QTextStream out(stdout);
    
    int i = 60;
    out.setIntegerBase(16);//设置16进制显示,所以使用输入输出流,也可以很容易的进行进制转换
    out << i << endl; //output:3c
    
    
    out.setNumberFlags(out.numberFlags()|QTextStream::ShowBase);
    out << i << endl; //output: 0x3c
    
    out.setNumberFlags(out.numberFlags()|QTextStream::ForceSign);
    out << i << endl; //output: +0x3c
    
    out.setNumberFlags(out.numberFlags()|QTextStream::UppercaseBase);
    out << i << endl; //output: +0X3c
    
    out.setNumberFlags(out.numberFlags()|QTextStream::UppercaseDigits);
    out << i << endl; //output: +0X3C
    
    double d = 100;
    out << d << endl;//output: 100
    
    out.setNumberFlags(QTextStream::ForcePoint);
    out << d << endl;//output: 100.000
} 

2 宽度,填充和对齐方式

2.1 宽度

可以调用setFieldWidth来设置输出流的宽度,所谓宽度是指,当在流中输出一个数时,至少产生宽度值所规定数量的字符。如果插入字符的个数小于宽度值,则用某个字符对空余的位置进行填充。

一定注意,这里的宽度是指定输出字符的最小数目,如果数目不够,则使用填充字符进行填充,而不会截断输出。如果你设置宽度为2时输出1234,仍会得到1234。

QTextStream的宽度设置与标准库的有一点不同,它不需要像标准库那样,在每一个输出符前都需要设置一次宽度。

2.2 对齐方式

对齐方式一般和宽度一起使用,

  • QTextStream::AlignLeft 左对齐
  • QTextStream::AlignRight 右对齐
  • QTextStream::AlignCenter 居中
  • QTextStream::AlignAccountingStyle 和AlignRight一样,只是数字的符号是左对齐的。
int main()
{
    QTextStream out(stdout);
    
    int i = 60;
    out.setFieldWidth(6);
    out << i << endl; //output:    60
    
    out.setPadChar('-');
    out << i << endl; //output:----60
    
    out.setFieldAlignment(QTextStream::AlignLeft);
    out << i << endl; //output:60----
    
    out.setFieldAlignment(QTextStream::AlignRight);
    out << i << endl; //output:----60
    
    out.setFieldAlignment(QTextStream::AlignCenter);
    out << i << endl; //output:--60--
    
    out.setNumberFlags(QTextStream::ForceSign);
    out.setFieldAlignment(QTextStream::AlignAccountingStyle);
    out << i << endl; //output:+---60
} 

3 精度

请看下面的程序:

QTextStream out(stdout);
double d = 12.3456789;
out << d << endl; //output:12.3457
Q_ASSERT(d==12.3456789);

此程序预想的输出结果应该是12.3456789,但实际的输出结果是12.3457,那么,是d的值改变了吗。当然没有,因为Q_ASSERT测试为真。

这是因为QTextStream 的精度默认设置为6,而如果想要改变它的默认精度,则可以使用setRealNumberPrecision方法。

 QTextStream out(stdout);
 out.setRealNumberPrecision(10);

 double d = 12.3456789;
 out << d << endl; //output:12.3456789
 Q_ASSERT(d==12.3456789);

好了,关于QTextStream的格式化输出就先介绍到这里。

最后也希望大家多多支持小豆君的创作,关注小豆君的公众号“小豆君Qt分享”,最新文章都会在公众号第一时间发布,或者你有不懂的问题,关注公众号后,可加好友或进Qt群获得答案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值