搜档网
当前位置:搜档网 › QString和字符串以及整型之间的转换

QString和字符串以及整型之间的转换

QString和字符串以及整型之间的转换
QString和字符串以及整型之间的转换

Qt char*, string, int与QString型字符串的转换

(1)将QString转换为char *

1 Qstringstr;

2 char* ch;

3 QByteArrayba = str.toLatin1();

4 ch=ba.data();

注意第三行,一定要加上,不可以str.toLatin1().data()这样一部完成,可能会出错。

补充:以上方法当QString里不含中文时,没有问题,但是QString内含有中文时,转换为char*就是乱码,采用如下方法解决:

方法1:添加GBK编码支持:

1 #include

2 QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

3 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后改变上面的第三行为:QByteArrayba = str.toLoacl8Bit(); toLoacl8Bit支持中文

方法2:先将QString转为标准库中的string类型,然后将string转为char*,如下:

1 QStringqstr;

2 std::string str = qstr.toStdString();//QString转换为string

3 const char* ch = str.c_str();

(2)把char*转换为QString。

示例:

1 const char *cstr;

2 QStringqstr= QString(QLatin1String(cstr));

(3)把string转换为QString.

1 std::string str="hello";

2 QStringqstr = QString(QString::fromLocal8Bit(str.c_str()));

(4)int(float)型转化为QString型

方法一:

1 long a = 63;

2 QString s = QString::number(a, 10); // s == "63"

3 QString t = QString::number(a, 16).toUpper(); // t == "3F"

(解释,变量a为int型或者float,double。10和16为进制) toUpper是大写

方法二:

1 long a = 63;

2 QString s = QString("%1").arg(a);

格式化字符串漏洞研究

格式化字符串漏洞研究 杜旭涛1,2,?邢春晓2,?周立柱1,? 1清华大学计算机系,北京100087 2清华大学WEB与软件技术中心,北京100087 摘要格式化字符串漏洞对计算机系统和网络具有很大的危胁。攻击者利用格式化字符串漏洞可以远程侵入网络上的计算机系统,偷看系统信息甚至得到系统的完全控制权。由于与传统的缓冲区溢出漏洞攻击的原理不同,对于缓冲区溢出漏洞进行防范的方法对于格式化字符串漏洞通常会失效。对于高可信软件来说,如何避免和防范格式化字符串漏洞的危害就显得格外重要。本文对格式化字符串漏洞进行了综合的介绍。指出了格式化字符串漏洞的成因和危害。使用多个例子从预防的角度说明了利用该漏洞进行攻击的基本原理。然后对相关的漏洞防范工具作了介绍。 关键词格式化字符串漏洞;shellcode;攻击;漏洞防范工具 Survey of Format String Vulnerability Xu-Tao Du1,2Chun-Xiao Xing2 1Department of Computer Science,Tsinghua University,Beijing100080 2Research Center of WEB and Software Engineeing,Tsinghua University,Beijing100080 Abstract Format string vulnerability is a vital threat to computer systems and networks.By exploiting the format string vulnerability,attackers can break into computer systems in the internet.They can get various information about the computer systems and can even get full control of them.Since the principle and methods of exploiting format string vulnerability and that of exploiting traditional buffer over?ow vulnerability are different,tools for preventing buffer over?ow attacks will usually fail in front of format string attacks.For the High-Con?dential Software,its very important to avoid and prevent from the damage of format string vulnerability.This paper introduce the format string vulnerability.After point out its origin and potential damage,we show the method to exploit this vulnerability through several concrete examples.Then we introduced some protecting tools for this vulnerability. Keywords Format String Vulnerability;Shellcode;Attack;Protecting Tools ?通讯作者。电子邮件:dxt05@https://www.sodocs.net/doc/e512138860.html, ?电子邮件:xingcx@https://www.sodocs.net/doc/e512138860.html, ?电子邮件:dcszlz@https://www.sodocs.net/doc/e512138860.html,

JAVA字符串格式化-String.format()的使用

JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。 format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。 format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。 显示不同转换符实现不同数据类型到字符串的转换,如图所示。 转换符说明示例 %s 字符串类型"mingrisoft" %c 字符类型'm' %b 布尔类型true %d 整数类型(十进制)99 %x 整数类型(十六进制)FF %o 整数类型(八进制)77 %f 浮点类型99.99 %a 十六进制浮点类型FF.35AE %e 指数类型9.38e+5 %g 通用浮点类型(f和e类型中较短的) %h 散列码 %% 百分比类型% %n 换行符 %tx 日期与时间类型(x代表不同的日期与时间转换符 测试用例 [java]view plaincopy 1.public static void main(String[] args) { 2. String str=null;

3. str=String.format("Hi,%s", "王力"); 4. System.out.println(str); 5. str=String.format("Hi,%s:%s.%s", "王南","王力","王张"); 6. System.out.println(str); 7. System.out.printf("字母a的大写是:%c %n", 'A'); 8. System.out.printf("3>7的结果是:%b %n", 3>7); 9. System.out.printf("100的一半是:%d %n", 100/2); 10. System.out.printf("100的16进制数是:%x %n", 100); 11. System.out.printf("100的8进制数是:%o %n", 100); 12. System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85); 13. System.out.printf("上面价格的16进制数是:%a %n", 50*0.85); 14. System.out.printf("上面价格的指数表示:%e %n", 50*0.85); 15. System.out.printf("上面价格的指数和浮点数结果的长度较短的 是:%g %n", 50*0.85); 16. System.out.printf("上面的折扣是%d%% %n", 85); 17. System.out.printf("字母A的散列码是:%h %n", 'A'); 18.} 输出结果 [plain]view plaincopy 1.Hi,王力 2.Hi,王南:王力.王张 3.字母a的大写是:A 4.3>7的结果是:false 5.100的一半是:50 6.100的16进制数是:64 7.100的8进制数是:144 8.50元的书打8.5折扣是:42.500000 元 9.上面价格的16进制数是:0x1.54p5 10.上面价格的指数表示:4.250000e+01 11.上面价格的指数和浮点数结果的长度较短的是:42.5000 12.上面的折扣是85% 13.字母A的散列码是:41 搭配转换符的标志,如图所示。 标志说明示例结果+ 为正数或者负数添加符号("%+d",15) +15 ?左对齐("%-5d",15) |15 | 0 数字前面补0 ("%04d", 99) 0099 空格在整数之前添加指定数量的 空格 ("% 4d", 99) | 99| , 以“,”对数字分组("%,f", 9999.99) 9,999.990000

c语言格式化说明符(输出格式)

c语言格式化说明符 1.1.1 格式化输入输出函数 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 1. 格式化规定符 Turbo C2.0提供的格式化规定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 —————————————————————————— %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数

%x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 说明: (1). 可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数, 不够3位右对齐。 %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。 %8s 表示输出8个字符的字符串, 不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。 但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。另外, 若想在输出值前加一些0, 就应在场宽项前加个0。 例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度 为4位。 如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。 例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。 (2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。 例如: %ld 表示输出long整数 %lf 表示输出double浮点数 (3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可 说明输出为左对齐, 否则为右对齐。 例如: %-7d 表示输出7位整数左对齐

c++格式化字符串

格式化字符串——以C++的名义(zt) 2009-12-22 10:59 从第一堂C语言课上的那个printf开始,格式化字符串就成了我的梦魇。此后我还在很多地方遇到过它们:fprintf,sscanf以及CString的Format成员函数……。除了能记住%s(String 的缩写)代表字符串,%d(Decimal的缩写)代表整数之外,每次用到格式化字符串的地方我都要求助于MSDN。 直到我看到C++的字符串格式化方式后,我决定从此抛弃C的那套格式化字符串的方法。在C++里格式化字符串,用到的最多的类是:ostringstream以及它的宽字符版本wostringstream。 话不多说,如果要将一个整数n格式化成字符串以便输出之用 CString的方式是这样的: CStringstr; str.Format(_T("%d"), n); ostringstream的方式: ostringstreamost; ost<

C语言字符输出格式化

几点说明: 1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。 例如:char、signed char、unsigned char是三种互不相同的类型; int、short、long也是三种互不相同的类型。 可以使用C++的函数重载特性进行验证,如: void Func(char ch) {} void Func(signed char ch) {} void Func(unsigned char ch) {} 是三个不同的函数。 2. char/signed char/unsigned char型数据长度为1字节; char为有符号型,但与signed char是不同的类型。 注意! 并不是所有编译器都这样处理,char型数据长度不一定为1字节,char也不一定为有符号型。 3. 将char/signed char转换为int时,会对最高符号位1进行扩展,从而造成运算问题。 所以,如果要处理的数据中存在字节值大于127的情况,使用unsigned char较为妥当。 程序中若涉及位运算,也应该使用unsigned型变量。 4. char/signed char/unsigned char输出时,使用格式符%c(按字符方式); 或使用%d、%u、%x/%X、%o,按整数方式输出; 输入时,应使用%c,若使用整数方式,Dev-C++会给出警告,不建议这样使用。 5. int的长度,是16位还是32位,与编译器字长有关。 16位编译器(如TC使用的编译器)下,int为16位;32位编译器(如VC使用的编译器cl.exe)下,int为32位。 6. 整型数据可以使用%d(有符号10进制)、%o(无符号8进制)或%x/%X(无符号16进制)方式输入输出。而格式符%u,表示unsigned,即无符号10进制方式。 7. 整型前缀h表示short,l表示long。 输入输出short/unsigned short时,不建议直接使用int的格式符%d/%u等,要加前缀h。

VB FORMAT 函数 格式化字串的说明

格式字符值说明 0零占位符如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到输出字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在输出字符串中出现的数字范围。“00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。例如,用“00”格式化34.5 将得到值 35。 #数字占位符如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到输出字符串中。否则,输出字符串中的此位置不存储任何值。请注意,如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。“##”格式字符串使得值被舍入到小数点前最近的数字,其中零总被舍去。例如,用“##”格式化 34.5 将得到值 35。 .小数点格式字符串中的第一个“.”字符确定格式化的值中的小数点分隔符的位置;任何其他“.”字符被忽略。用作小数点分隔符的实际字符由控制格式化的 NumberFormatInfo 的 NumberDecimalSeparator 属性确定。 ,千位分隔符和数字比例换算“,”字符有两种用途。首先,如果格式字符串在小数点(如果有)左边的两个数字占位符(0 或 #)之间包含“,”字符,则输出将在小数点分隔符左边的每三个数字之间插入千位分隔符。输出字符串中用作小数点分隔符的实际字符由控制格式化的当前 NumberFormatInfo 的NumberGroupSeparator 属性确定。 其次,如果格式字符串在紧邻小数点的左侧包含一个或多个“,”字符,则数字在格式化之前将被“,”字符数除然后乘以 1000。例如,格式字符串“0,,”将 100,000,000 简单表示为 100。使用“,”字符指示比例换算在格式化数字中不包括千位分隔符。因此,若要将数字缩小 1,000,000 倍并插入千位分隔符,应使用格式字符串“#,##0,,”。 %百分比占位符在格式字符串中出现“%”字符将导致数字在格式化之前乘以 100。适当的符号插入到数字本身在格式字符串中出现“%”的位置。使用的百分比字符由当前的 NumberFormatInfo 类确定。 E0 E+0 E-0 e0 e+0

word2010字符格式化精讲内容

7.1.4字符格式化 默认状态下,我们输入Word的文字统一以字体为宋体、字号为五号、颜色为黑色的默认格式呈现。我们可以按照实际需要对这些默认格式进行修改。 1.设置字体、字号、字形 (1)字体 字体是文字的一种书写风格。常用的中文字体有宋体、仿宋体、黑体、隶书和幼圆等字体。 设置文档中的字体,可按如下步骤操作: ①选定要设置格式的文本。 ②选择“开始”→“字体”列表框右端的下拉按钮,在随之展开的字体列表中,单击所需的字体。 (2)字号 字号即是字符的大小。汉字字符的大小用初号、小二号、五号、八号等表示,字号越大尺寸越小。字号也可以用“磅”的数值表示,1磅等于七十二分之一英寸。 设置文档中的字号,可按如下步骤操作: ①选定要设置格式的文本。 ②选择“开始”→“字体”中的“字号”列表框右端的下拉按钮,在随之展开的字号列表中,单击所需的字号。 (3)字形 字形是指附加于字符的属性,包括粗体、斜体、下画线等。设置文档中的字形,可按如下步骤操作: ①选定要设置格式的文本。

②选择“开始”→“字体”中的“加粗”、“倾斜”、“下划线”、“字符边框”或“字符底纹”等按钮,给所选的文字设置相应格式。 2.字符颜色和缩放比例 (1)字符颜色 字符颜色是指字符的色彩。要选择字符的颜色,可以选择“开始”→“字体”中的“字体颜色”按钮的下拉按钮,展开颜色列表框,单击所需的颜色选项。 (2)缩放比例 缩放比例是指字符的缩小与放大,即是将字符的宽度按比例加宽或缩窄。实现字符缩放可选择“开始”→“字体”中的“字符缩放”命令,选择缩放比例。其中数字表示缩放的百分比,大于100%表示加宽,小于100%表示缩窄。 提示: 使用按钮可以快捷地格式化本文,但如果需要获得更多的格式化设置,最好使用字体对话框中进行详细格式设置。 3.使用字体对话框 单击鼠标右键,在随之打开的快捷菜单中选择“字体”命令,打开如图所示的“字体”对话框。在“字体”对话框中,还可以设置“西文字体”、“下划线线型”、“下划线颜色”、“着重号”等选项,如图7-1-13所示。 此外,还可以在“字体”对话框的高级选项卡中改变字符间距、字宽度和水平位置,如图7-1-14所示。

c#字符串格式化ToString总结

1、数字转换到字符串 保留小数及整数位: toString(“00.00”) 如21显示:21.00,2.456显示02.46 固定长度一个数值其它方法: i.ToString().PadLeft(10,'0'); 固定长度为10,左不足补0,结果为0000000001; i=1; i.ToString("N").PadLeft(10,'0'); 结果为00000001.00; i=1; i.ToString().PadLeft(10,' '); 结果为 1; 2、日期转换到字符串 DateTime dt = DateTime.Now;

dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString();//127756416859912816 dt.ToFileTimeUtc().ToString();//127756704859912816 dt.ToLocalTime().ToString();//2005-11-5 21:21:25 dt.ToLongDateString().ToString();//2005年11月5日 dt.ToLongTimeString().ToString();//13:21:25 dt.ToOADate().ToString();//38661.5565508218 dt.ToShortDateString().ToString();//2005-11-5 dt.ToShortTimeString().ToString();//13:21 dt.ToUniversalTime().ToString();//2005-11-5 5:21:25 dt.Year.ToString();//2005 dt.Date.ToString();//2005-11-5 0:00:00 dt.DayOfWeek.ToString();//Saturday dt.DayOfYear.ToString();//309 dt.Hour.ToString();//13 https://www.sodocs.net/doc/e512138860.html,lisecond.ToString();//441 dt.Minute.ToString();//30 dt.Month.ToString();//11 dt.Second.ToString();//28 dt.Ticks.ToString();//632667942284412864 dt.TimeOfDay.ToString();//13:30:28.4412864 dt.ToString();//2005-11-5 13:47:04 dt.AddYears(1).ToString();//2006-11-5 13:47:04 dt.AddDays(1.1).ToString();//2005-11-6 16:11:04 dt.AddHours(1.1).ToString();//2005-11-5 14:53:04 dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04 dt.AddMonths(1).ToString();//2005-12-5 13:47:04 dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05 dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10 dt.AddTicks(1000).ToString();//2005-11-5 13:47:04

c++字符串格式化

#include //不要用iostream.h ,会出现好多问题 #include // io 流控制头文件, 主要是一些操纵用法如setw(int n),setprecision(int n) ,setbase(int n),setfill(char c)的. ▲setw(n)用法:通俗地讲就是预设宽度 如 cout< #include int main()

C++格式化字符串(格式化规定符)

C++格式化字符串 1格式化规定符 符号作用 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 说明: (1). 可以在"%"和字母之间插进数字表示最大长宽。例如: %3d 表示输出3位整型数, 不够3位右对齐。 %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6,小数点占一位, 不够9位右对齐。 %8s 表示输出8个字符的字符串, 不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的长宽, 将按其实际长度输出。但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。 另外, 若想在输出值前加一些0, 就应在场宽项前加个0。 例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度为4位。 如果用浮点数表示字符或整型量的输出格式, 小数点后的数字代表最大宽度, 小数点前的数字代表最小宽度。 例如: %6.9s 表示显示一个长度不小于6且不大于9的字符串。若大于9, 则第9个字符以后的内容将被删除。 (2). 可以在"%"和字母之间加小写字母l, 表示输出的是长型数。例如: %ld 表示输出long整数 %lf 表示输出double浮点数 (3). 可以控制输出左对齐或右对齐, 即在"%"和字母之间加入一个"-" 号可说明输出为左对齐, 否则为右对齐。例如: %-7d 表示输出7位整数左对齐

windows平台下的格式化字符串漏洞利用技术

windows平台下的格式化字符串漏洞利用技术 作者:Abysssec 译者:riusksk(泉哥:https://www.sodocs.net/doc/e512138860.html,) 本文真正的受益者应该是那些有定汇编语言基础,以及具备经典的栈溢出知识的人,这样本文才能引领读者在windows平台下编写出自己的格式化字符串漏洞利用程序。本文主要讲述各种关键的利用技术,也许在本文发布前已经有不少人写了关于格式化字符串漏洞的文章,但他们的文章一般都相对枯燥和基础。但我们也不敢说本文讲述得相当出色和全面,不过我们会尽量使其达到这种程度。 格式化字符串这类软件漏洞最初是在1999年左右发现的,但在2000年之前一直被认为是没有危害和利用价值的。格式化字符串攻击可使程序崩溃或者执行恶意代码。这个问题源于对用户输入内容未进行过滤导致的,这些输入数据都是作为某些C函数执行格式化操作时的参数,如printf()。恶意用户可以使用%s和%x等格式符,从堆栈或其它可能内存位置来输出数据。也可以使用格式符%n向任意地址写入任意数据,配合printf()函数和其它类似功能的函数就可以向存储在栈上的地址写入被格式化的字节数。一个经典的exploit是混合这些技术,然后用恶意shellcode的地址来覆盖某一链接库函数地址或者栈上的返回地址。其中填充的一些格式化参数主要是用于控制输出的字节数,而%x主要用于从栈中弹出字节直至格式化字符串自身的起始位置。伪造的格式化字符串起始部分应该用欲执行的恶意代码地址来覆写,这个可以借助%n格式符来实现。因此你现在需要理解受此类漏洞影响的PERL 和C/C++软件,除printf()函数之外,其它函数也可能受到格式化字符串漏洞的影响,比如: ●Printf() ●Snprintf() ●Vprintf() ●Syslog() ●…… 格式化字符串漏洞除了可以执行恶意代码外,还可以从漏洞程序中读取某些数据,比如密码及其它重要信息。下面我们写份C代码进行分析,以帮助大家理解消化。 #include #include int main (int argc, char *argv[]) { int x,y,z; x= 10; y= 20; z = y -x; print (“the result is : %d”,z); // %d using correct format so code is secure } #include #include void parser(char *string) { char buff[256]; memset(buff,0,sizeof(buff));

Delphi中Format的字符串格式化使用说明

一、函数地用法 是一个很常用,却又似乎很烦地方法,本人试图对这个方法地帮助进行一些翻译,让它有一个完整地概貌,以供大家查询之用: 首先看它地声明: ( : ; : ): ; ; 事实上方法有两个种形式,另外一种是三个参数地,主要区别在于它是线程安全地,但并不多用,所以这里只对第一个介绍: ( : ; : ): ; ; 参数是一个格式字符串,用于格式化里面地值地.又是什么呢,它是一个变体数组,即它里面可以有多个参数,而且每个参数可以不同. 如以下例子: (' ',['']); 返回后就是 现在来看参数地详细情况: 里面可以写普通地字符串,比如' ' 但有些格式指令字符具有特殊意义,比如"" 格式指令具有以下地形式: "" [ ":"] [""] [] ["." ] 它是以""开始,而以结束,表示一个具体地类型.中间是用来格式化类型地指令字符,是可选地. 先来看看可以是以下字符: 十制数,表示一个整型值 和一样是整型值,但它是无符号地,而如果它对应地值是负地,则返回时是一个地次方减去这个绝对值地数 如:(' ',[-]); 返回地是: 对应浮点数 科学表示法,对应整型数和浮点数, 比如(' ',[]); 返回地是: 等一下再说明如果将数地精度缩小 这个只能对应浮点型,且它会将值中多余地数去掉 比如(' ',[]); 返回地是: 只能对应浮点型,将值转化为号码地形式.看一个例子就明白了 (' ',[]); 返回地是 注意有两点,一是只表示到小数后两位,等一下说怎么消除这种情况 二是,即使小数没有被截断,它也不会也像整数部分一样有逗号来分开地 钱币类型,但关于货币类型有更好地格式化方法,这里只是简单地格式化 另外它只对应于浮点值 (' ',[]); 返回:¥ 对应于指针类型,返回地值是指针地地址,以十六进制地形式来表示

Java String.Format() 方法及

Java String.Format() 方法及参数说明 文章出处:飞诺网(https://www.sodocs.net/doc/e512138860.html,):https://www.sodocs.net/doc/e512138860.html,/course/3_program/java/javajs/20091119/182906.html

JDK1.5中,String类新增了一个很有用的静态方法String.format(): format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。 format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。举几个这个方法实用的例子(注释是输出结果): CODE: long now = System.currentTimeMillis(); String s = String.format("%tR", now); // "15:12" CODE: // Current month/day/year Date d = new Date(now); s = String.format("%tD", d); // "07/13/04" CODE: s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647" CODE: s = String.format("%05d", 123); // "00123" 是不是很方便,让人动心啊?哈哈,还有更多的效果! 其实format函数有些类似c语言中printf函数,一些格式字符串与C 类似,但已进行了某些定制,以适应Java 语言,并且利用了其中一些特性。此方法提供了对布局对齐和排列的支持,以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。支持诸如byte、BigDecimal和Calendar 等常见Java 类型。 产生格式化输出的每个方法都需要格式字符串和参数列表。格式字符串是一个String,它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例: Calendar c = ...; String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c); 格式字符串是format 方法的第一个参数。它包含三个格式说明符"%1$tm"、"%1$te" 和"%1$tY",它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是包括"Dukes Birthday: " 和其他任何空格或标点符号的固定文本。参数列表由传递给

文本格式化

课程设计实验报告 题目:编制一个将待格式化的文本按照一定的版面要求重新排版并输出到文件的程序 一:需求分析 1:文本文件非空且以文本文件形式存放(为空没有格式化意义)。输入输出文件名均由用户从键盘输入。 2:字的定义:由非(‘@’,‘’(空格))的任意ASCII码字符组成。 3:文本文件的定义:由字母字符,数字字符,空格和可以用ASCII代码显示的字符组成。‘@’只表示换行的意义。‘’(空格)只表示一个字的结束的意义。 4:任何完整的字都没有被分割在两行:,行尾不齐没关系,但要实现左对齐。每行字符数不超过60 5:输出文件中字与字之间只留一个空格符,即实现多余空格符的压缩。 6:符号‘@’指示它后面的正文在格式化时应另起一段排放,段首缩入8个字符的位置。 二:概要设计 1:void printOut() { 该函数的功能是:格式化文本文件后必要提示用户的信息说明} 2:void writeOut(FILE * fp2,char c1) { 该函数的功能是:将字符输出到文本文件和屏幕} 3:int zuokongbai(FILE * fp2) { 该函数的功能是:实现文本参数格式(左空白)} 4:void pageNumber(FILE * fp2,char * aIndex,int * page) { 该函数的功能是:输出当前页码} 5:void out(int * columns,char * array,int * linage,FILE * fp2,int * page,int * size) { 该函数的功能是:判断是否输出到文本文件和屏幕} 6:void linageFull(FILE * fp2,int * linage,int * columns,int * page) { 该函数的功能是:输出页首的格式(头长+左空白)} 7:void readIn(FILE * fp1,FILE * fp2) { 该函数是整个程序的核心,执行程序的主要逻辑判断} 8:void main() { 该函数的功能是:程序的入口}

使用CSharp格式化字符串

使用C#格式化字符串 如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Libr ary(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对S tring.Format方法肯定很熟悉。在C#中也经常使用这个方法来格式化字符串,比如下面这样: 在我的机器上,可以得到下面的输出: item16sellsat¥3.57 也许你的机器上的输出和这个不太一样。这是正常的,本文稍后就会解释这个问题。 在我们日常使用中,更多的是使用Console.WriteLine方法来输出一个字符串。其实String.Format和C onsole.WriteLine有很多共同点。两个方法都有很多重载的格式并且采用无固定参数的对象数组作为最后一个参数。下面的两个语句会产生同样的输出。 输出如下: Hello12345.67TrueQ45678 Hello12345.67TrueQ45678 2 字符串格式 String.Format和WriteLine都遵守同样的格式化规则。格式化的格式如下:"{ N [, M ][: formatString ]}", arg1, ... argN,在这个格式中:

1)N是从0开始的整数,表示要格式化的参数的个数 2)M是一个可选的整数,表示格式化后的参数所占的宽度,如果M是负数,那么格式化后的值就是左对齐的,如果M是正数,那么格式化后的值是右对齐的 3)formatString是另外一个可选的参数,表示格式代码 argN表示要格式化的表达式,和N是对应的。 如果argN是空值,那么就用一个空字符串来代替。如果没有formatString,那么就用参数N对应的ToStr ing方法来格式化。下面的语句会产生同样的输出: 输出是: 123 123 123 也可以通过String.Format得到同样的输出。

Windows格式化字符串漏洞利用

Windows格式化字符串漏洞利用 作者:mr_me https://https://www.sodocs.net/doc/e512138860.html,/blog/ 译者:StudyRush(老钟古)https://www.sodocs.net/doc/e512138860.html,/StudyRush/ 老钟古序: 本来是打算翻译作者的另外一篇文章(https://www.sodocs.net/doc/e512138860.html,/blog/?p=71)的,但是由于在实战分析过程中遇到了一些问题自己暂时无法解决,等技术掌握更深入一些之后再去想办法解决之后再进行翻译(实在不想让它胎死腹中)。因为没有实战分析过的文章对自己产生的价值会小很多,没有实践过就等于把文章最精华的部分给浪费了,不能够为了翻译而翻译。在翻译的过程中加了很多自己的心得体会。 正文: 这经常让我感到很奇怪怎么样才能够从一个格式化字符串的bug中来执行代码。我知道在这样的一种情况下我们能够用C类型的说明符进行漏洞利用,在一个X86平台上我们不能够直接指向EIP寄存器或者结构化异常处理。当大部分格式化字符串bugs几乎不存在时,我仍然感到对于任何一个安全分析师来说这是一个值得去理解的概念。(即什么是格式化溢出漏洞) 基本步骤: 1.通过说明符%x来找到我们的缓冲区攻击字符串的起始位置。 2.使用%n将这个值写入到EAX寄存器中。 3.将一个指向我们的shellcode的地址放入到ECX/EDX寄存器中(为什么呢?) 4.通过%x来重新计算EAX寄存器的偏移并用一个有效的返回值来覆写它 (译注:补充点小知识:在格式化字符串的输出中 (1)s—这个参数被视为指向字符串的指针,将以字符串的形式输出参数;(2)n—这个参数被视为指向整数的指针,在这个参数之前输出的字符的数量将被保存到这个参数指向的地址里。这个可以自己动手实践一下) 举个例子来验证一下%n的实际输出结果。 命令1: E:\编程练习\C专家编程\第一章>formatstring.exe AAAAAAAAAA%x%x%x%x%x%x%x 在没有使用%n说明符的输出结果看下图 AAAAAAAAAAAAAAAAAAAAAAAAAAADDDDD00000000003e3b2f 这个里一个32个字符

C# String.Format格式化输出和ToString()的一些常用用法.

C# String.Format格式化输出 字符串的格式化输出: string s1 = 12345.ToString("n"); //生成 12,345.00 string s2 = 12345.ToString("C"); //生成¥12,345.00 string s3 = 12345.ToString("e"); //生成 1.234500e+004 string s4 = 12345.ToString("f4"); //生成 12345.0000 string s5 = 12345.ToString("x"); //生成 3039 (16进制) string s6 = 612345.ToString("p"); //生成 1,234,500.00% string s7 = String.Format("{0:(###) ###-####}", 8005551212); //生成(1800)555-1212 int a = 12345678; double b = 1234.12543; string s8= String.Format("abcd{0:C}abcd", b);//abcd¥1,234.13abcd string s9 = "abcd" + b.ToString("C") + "abcd";//abcd¥1,234.13abcd string s10 = String.Format("{0:C3}", b);//¥1,234.125 string s11 = b.ToString("C3");//¥1,234.125 string s12 = String.Format("{0:d}", a);//十进制--12345678 string s13 = b.ToString("d");//十进制--相同的类型,转换报错 string s14 = String.Format("{0:e}", a);//指数--1.234568e+007 string s15 = b.ToString("e");//指数--1.234125e+003 string s16 = String.Format("{0:f}", a);//定点数--12345678.00 string s17 = b.ToString("f");//定点数--1234.13 string s18 = String.Format("{0:n}", a);//数值--12,345,678.00 string s19 = b.ToString("n");//数值--1,234.13 string s20 = String.Format("{0:x}", a);//十六进制--bc614e string s21 = b.ToString("x");//16--带有小数不能转换,出错 string s22 = String.Format("{0:g}", a);//通用为最紧凑--12345678 string s23 = b.ToString("g");//通用为最紧凑--1234.12543 b = 4321.12543; a = 1234; string s24 = String.Format("{0:000000}", a);// 001234 string s25 = String.Format("{0:000000}", b);// 004321 //# 描述:占位符,如果可能,填充位 string s26 = String.Format("{0:#######}", a);// 1234 string s27 = String.Format("{0:#######}", b);// 4321 string s28 = String.Format("{0:#0####}", a);// 01234 string s29 = String.Format("{0:0#0000}", b);// 004321 //. 描述:小数点 string s30 = String.Format("{0:000.000}", a);//1234.000 string s31 = String.Format("{0:000.000}", b);//4321.125

相关主题