最新消息:

C++输出十六进制格式字符串,总结C++格式化输出知识

C++语法 CPPKU 365浏览 0评论

C++输出十六进制格式字符串

下面的函数是我实现的C++输出十六进制格式字符串:

std::string ConvertToString( unsigned char value )
{
std::ostringstream out;

out << std::hex << setiosflags(std::ios::uppercase) << std::setw( 2 ) << std::setfill( ‘0’ );
// AND 0xFF will remove the leading “ff” in the output,
// So that we could get “\xab” instead of “\xffab”
out << ( value & 0xff );
return out.str();
}

C++格式化输出相关知识总结:

一.使用控制符控制输出格式

C语言里可以用printf(),%f来实现浮点数的格式化输出,用cout呢…?

iomanip是I/O流控制头文件,就像printf的格式化输出一样。

以下是一些常用的:

dec 置基数为10 相当于”%d”
hex 置基数为16 相当于”%X”
oct 置基数为8 相当于”%o”
setfill(c) 设填充字符为c
setprecision(n)   设显示小数精度为n位
setw(n) 设域宽为n个字符
setioflags(ios::fixed)   固定的浮点显示
setioflags(ios::scientific) 指数表示
setiosflags(ios::left) 左对齐
setiosflags(ios::right) 右对齐
setiosflags(ios::skipws 忽略前导空白
setiosflags(ios::uppercase) 16进制数大写输出
setiosflags(ios::lowercase) 16进制小写输出
setiosflags(ios::showpoint) 强制显示小数点
setiosflags(ios::showpos)   强制显示符号

#include <iostream>
#include <iomanip>//不要忘记包含此头文件
using namespace std;
int main()
{
   int a;
   cout<<"input a:";
   cin>>a;
   cout<<"dec:"<<dec<<a<<endl;  //以十进制形式输出整数
   cout<<"hex:"<<hex<<a<<endl;  //以十六进制形式输出整数a
   cout<<"oct:"<<setbase(8)<<a<<endl;  //以八进制形式输出整数a
   char *pt="China";  //pt指向字符串"China"
   cout<<setw(10)<<pt<<endl;  //指定域宽为,输出字符串
   cout<<setfill('*')<<setw(10)<<pt<<endl;  //指定域宽,输出字符串,空白处以'*'填充
   double pi=22.0/7.0;  //计算pi值
   //按指数形式输出,8位小数
   cout<<setiosflags(ios::scientific)<<setprecision(8);
   cout<<"pi="<<pi<<endl;  //输出pi值
   cout<<"pi="<<setprecision(4)<<pi<<endl;  //改为位小数
   cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;  //改为小数形式输出
   return 0;
}

输出结果:

input a:34↙(输入a的值)
dec:34                   (十进制形式)
hex:22                   (十六进制形式)
oct:42                   (八进制形式)
China               (域宽为)
*****China               (域宽为,空白处以’*’填充)
pi=3.14285714e+00        (指数形式输出,8位小数)
pi=3.1429e+00            (指数形式输出,4位小数)
pi=3.143                 (小数形式输出,精度仍为)

二.使用流对象的成员函数控制输出

除了可以用控制符来控制输出格式外,还可以通过调用流对象cout中用于控制输出格式的成员函数来控制输出格式。用于控制输出格式的常用的成员函数,如:

流成员函数 与之作用相同的控制符 作用
precision(n) setprecision(n) 设置实数的精度为n位
width(n) setw(n) 设置字段宽度为n位
fill(c) setfill(c) 设置填充宇符c
setf() setiosflags() 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中的内容相同,如表13.5所示
unsetf() resetioflags() 终止已设置的输出格式状态,在括号中应指定内容

 

流成员函数setf和控制符setiosflags括号中的参数表示格式状态,它是通过格式标志来指定的。格式标志在类ios中被定义为枚举值。因此在引用这些格式标志时要在前面加上类名ios和域运算符“::”

格式标志 作用
ios::left 输出数据在本域宽范围内向左对齐
ios::right 输出数据在本域宽范围内向右对齐
ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
ios::dec 设置整数的基数为10
ios::oct 设置整数的基数为8
ios::hex 设置整数的基数为16
ios::showbase 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头)
ios::showpoint 强制输出浮点数的小点和尾数0
ios::uppercase 在以科学记数法格式E和以十六进制输出字母时以大写表示
ios::showpos 对正数显示“+”号
ios::scientific 浮点数以科学记数法格式输出
ios::fixed 浮点数以定点格式(小数形式)输出
ios::unitbuf 每次输出之后刷新所有的流
ios::stdio 每次输出之后清除stdout, stderr
#include <iostream>


using namespace std;
int main()
{


   int a = 21;
   cout.setf(ios::showbase);        // 显示基数符号(0x或)
   cout<<"dec:"<<a<<endl;           // 默认以十进制形式输出
   cout.unsetf(ios::dec);           // 终止十进制格式设置

   cout.setf(ios::hex);             // 设置以十六进制形式输出
   cout<<"hex:"<<a<<endl;
   cout.unsetf(ios::hex);           // 终止十六进制形式输出

   cout.setf(ios::oct);             // 设置以八进制形式输出
   cout<<"oct:"<<a<<endl;
   cout.unsetf(ios::oct);           // 终止八进制形式输出

   char *pt = "China";
   cout.width(10);                  // 指定域宽为10
   cout<<pt<<endl;

   cout.width(10);                  // 指定域宽为10
   cout.fill('*');                  // 设置空白处以*号填充
   cout<<pt<<endl;

   double pi = 22.0/7.0;            // 输出PI值
   cout.setf(ios::scientific);      // 设置以科学计数法形式输出
   cout<<"pi=";
   cout.width(14);                  // 设置域宽为14
   cout<<pi<<endl;
   cout.unsetf(ios::scientific);    // 终止科学计数法形式输出

   cout.setf(ios::fixed);           // 设置以定点形式输出
   cout.width(12);                  // 指定域宽为12
   cout.setf(ios::showpos);         // 正数输出+号
   cout.setf(ios::internal);        // 数符出现在左侧
   cout.precision(6);               // 保留位小数
   cout<<pi<<endl;

   return 0;
}

运行结果:

dec:21(十进制形式)
hex:0x15                 (十六进制形式,以x开头)
oct:025                  (八进制形式,以开头)
China               (域宽为)
*****China               (域宽为,空白处以’*’填充)
pi=**3.142857e+00        (指数形式输出,域宽,默认位小数)
+***3.142857             (小数形式输出,精度为,最左侧输出数符“+”)

注意:

1.成员函数width(n)和控制符setw(n)只对其后的第一个输出项有效

2.对输出格式的控制,即可以使用控制符,也可以使用cout流有关的成员函数,二者的作用是相同的。控制符是在头文件iomanip中定义的,因此用控制符时,必须包含iomanip头文件。cout流的成员函数是在头文件iostream 中定义的,因此只需包含头文件iostream,不必包含iomanip。

转载请注明:cppku-C++库 » C++输出十六进制格式字符串,总结C++格式化输出知识

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址