正如 ap_[u]fixed<>
变量初始化和赋值一样,Vitis HLS 支持打印显示超 64 位的值。
输出存储在 ap_[u]fixed
变量中的任意值的最简单方法是使用 C++ 标准输出串流:std::cout
(#include <iostream> or <iostream.h>)
。串流插入运算符 <<
已重载,可正确输出任意给定 ap_[u]fixed
变量的全部可能值。以下串流操控程序同样受支持,以便按所示方式对该值进行格式化。
-
dec
(十进制) -
hex
(十六进制) -
oct
(八进制)#include <iostream.h> // Alternative: #include <iostream> ap_fixed<6,3, AP_RND, AP_WRAP> Val = 3.25; cout << Val << endl; // Yields: 3.25
使用标准 C 语言库
您还可使用标准 C 语言库 (#include
<stdio.h>
) 来打印大于 64 位的值:
- 使用
ap_[u]fixed
类方法to_string()
将值转换为 C++std::string
。 - 使用
std::string
类方法c_str()
将结果转换为以 null 结尾的 C 语言字符串。
可选实参 1(指定基数)
您可为 ap[u]int::to_string()
方法传递 1 个可选实参以指定期望的数字格式的基数。有效的基数实参值包括:
- 2(二进制)
- 8(八进制)
- 10(十进制)
- 16(十六进制,默认值)
可选实参 2(打印为有符号的值)
ap_[u]int::to_string()
的第 2 个可选实参可指定是否将非十进制格式打印为有符号的值。该实参为布尔值。默认值为 false,导致非十进制格式打印为无符号的值。
ap_fixed<6,3, AP_RND, AP_WRAP> Val = 3.25;
printf("%s \n", in2.to_string().c_str()); // Yields: 0b011.010
printf("%s \n", in2.to_string(10).c_str()); //Yields: 3.25
以下 C++ 操控程序函数支持 ap_[u]fixed
类型:
- setprecision
- setw
- setfill
setprecision 操控程序用于设置要使用的小数位精度。需 1 个参数 f
作为小数位精度的值,其中 n
用于指定要显示的有意义的最大位数(计算小数点前后的总位数)。
f
默认值为 6,与原生 C 浮点类型一致。
ap_fixed<64, 32> f =3.14159;
cout << setprecision (5) << f << endl;
cout << setprecision (9) << f << endl;
f = 123456;
cout << setprecision (5) << f << endl;
以上示例显示了以下结果,其中当实际精度超过指定精度时,将舍入打印的结果:
3.1416
3.14159
1.2346e+05
setw
操控程序:
- 用于设置要用作为字段宽度的字符数。
- 需 1 个参数
w
作为宽度值其中
-
w
用于判定在某些输出表示法中将写入的最小字符数。
-
如果该表示法的标准宽度小于字段宽度,那么将以填充字符来填充该表示法。填充字符由 setfill 操控程序来控制,需 1 个参数 f
作为填充字符。
例如,给定:
ap_fixed<65,32> aa = 123456;
int precision = 5;
cout<<setprecision(precision)<<setw(13)<<setfill('T')<<a<<endl;
输出为:
TTT1.2346e+05