Eval的格式,主要看大括号的格式,其他不用那样写

本文详细介绍了 C# 中各种数据格式化的应用方法,包括数值、日期和枚举类型的格式化技巧。通过丰富的示例展示了如何使用不同的格式化字符串来美化输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文发布时间为:2009-08-26 —— 来源于本人的百度文章 [由搬家工具导入]

使用范例:<%#Eval("date","{0:d}") %>

<%# databinder.eval(container.dataitem, "integervalue", "{0:c}") %>
格式化字符串参数是可选的。如果忽略参数,databinder.eval 返回对象类型的值,

//显示二位小数
<%# databinder.eval(container.dataitem, "unitprice", "${0:f2}") %>

//{0:g}代表显示true或false
<itemtemplate>
<asp:image width="12" height="12" border="0" runat="server"
alternatetext='<%# databinder.eval(container.dataitem, "discontinued", "{0:g}") %>'
imageurl='<%# databinder.eval(container.dataitem, "discontinued", "~/images/{0:g}.gif") %>' />
</itemtemplate>
//转换类型
((string)databinder.eval(container, "dataitem.p_ship_time_sbm8")).substring(4,4)
{0:d} 日期只显示年月日
{0:yyyy-mm-dd} 按格式显示年月日
{0:c} 货币样式
<%#container.dataitem("price","{0:¥#,##0.00}")%>
<%# databinder.eval(container.dataitem,"company_ureg_date","{0:yyyy-m-d}")%>
specifier type      format    output (passed double 1.42)   output (passed int -12400)
c   currency         {0:c}      $1.42      -$12,400
d   decimal          {0:d}     system.formatexception   -12400
e   scientific       {0:e}     1.420000e+000     -1.240000e+004
f   fixed point      {0:f}   1.42     -12400.00
g   general          {0:g}   1.42      -12400
n   number with commas for thousands   {0:n}   1.42      -12,400
r   round trippable     {0:r}   1.42      system.formatexception
x   hexadecimal     {0:x4}   system.formatexception    cf90


{0:d} 日期只显示年月日
{0:yyyy-mm-dd} 按格式显示年月日

样式取决于 web.config 中的设置
{0:c}   或 {0:£0,000.00} 货币样式   标准英国货币样式
<system.web>
<globalization requestencoding="utf-8" responseencoding="utf-8" culture="en-us" uiculture="en-us" />
</system.web>
显示为 £3,000.10

{0:c}   或 string.format("{0:c}", price); 中国货币样式
<system.web>
<globalization requestencoding="utf-8" responseencoding="utf-8" culture="zh-cn" uiculture="zh-cn" />
</system.web>
显示为 ¥3,000.10

{0:c}   或 string.format("{0:c}", price); 美国货币样式
<system.web>
<globalization requestencoding="utf-8" responseencoding="utf-8" />
</system.web>
显示为 $3,000.10

 

============

stringstr1 =string.Format("{0:N1}",56789);               //result: 56,789.0
stringstr2 =string.Format("{0:N2}",56789);               //result: 56,789.00
stringstr3 =string.Format("{0:N3}",56789);               //result: 56,789.000
stringstr8 =string.Format("{0:F1}",56789);               //result: 56789.0
stringstr9 =string.Format("{0:F2}",56789);               //result: 56789.00
stringstr11 =(56789 / 100.0).ToString("#.##");           //result: 567.89
stringstr12 =(56789 / 100).ToString("#.##");             //result: 567

C 或 c
货币
Console.Write("{0:C}", 2.5); / 2.50
Console.Write("{0:C}", -2.5); //($2.50)

D 或 d
十进制数
Console.Write("{0:D5}", 25); //00025

E 或 e
科学型
Console.Write("{0:E}", 250000); //2.500000E+005

F 或 f
固定点
Console.Write("{0:F2}", 25); //25.00
Console.Write("{0:F0}", 25); //25

G 或 g
常规
Console.Write("{0:G}", 2.5); //2.5

N 或 n
数字
Console.Write("{0:N}", 2500000); //2,500,000.00

X 或 x
十六进制
Console.Write("{0:X}", 250); //FA
Console.Write("{0:X}", 0xffff); //FFFF

/////////////////////////////////////////////////////////////////////////////////C#格式化数值结果表

字符

说明

示例

输出

C货币string.Format("{0:C3}", 2)$2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E+0011.20E+001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{0:N}", 250000)250,000.00X十六进制string.Format("{0:X000}", 12)C

string.Format("{0:000.000}", 12.2)012.200Strings

There really isn't any formatting within a strong, beyond it's alignment. Alignment works for any argument being printed in a String.Format call.

 

SampleGeneratesString.Format("->{1,10}<-", "Hello");-> Hello<-String.Format("->{1,-10}<-", "Hello");->Hello <-Numbers

Basic number formatting specifiers:

 

SpecifierTypeFormat

Output
(Passed
Double 1.42)

Output
(Passed
Int -12400)

cCurrency{0:c}$1.42-$12,400dDecimal (Whole number){0:d}System.
FormatException
-12400eScientific{0:e}1.420000e+000-1.240000e+004fFixed point{0:f}1.42-12400.00gGeneral{0:g}1.42-12400nNumber with commas for thousands{0:n}1.42-12,400rRound trippable{0:r}1.42System.
FormatException
xHexadecimal{0:x4}System.
FormatException
cf90

Custom number formatting:

 

SpecifierTypeExampleOutput (Passed Double 1500.42)Note0Zero placeholder{0:00.0000}1500.4200Pads with zeroes.#Digit placeholder{0:(#).##}(1500).42
.Decimal point{0:0.0}1500.4
,Thousand separator{0:0,0}1,500Must be between two zeroes.,.Number scaling{0:0,.}2Comma adjacent to Period scales by 1000.%Percent{0:0%}150042%Multiplies by 100, adds % sign.eExponent placeholder{0:00e+0}15e+2Many exponent formats available.;Group separatorsee below

The group separator is especially useful for formatting currency values which require that negative values be enclosed in parentheses. This currency formatting example at the bottom of this document makes it obvious:

Dates

Note that date formatting is especially dependant on the system's regional settings; the example strings here are from my local locale.

 

SpecifierTypeExample (Passed System.DateTime.Now)dShort date10/12/2002DLong dateDecember 10, 2002tShort time10:11 PMTLong time10:11:29 PMfFull date & timeDecember 10, 2002 10:11 PMFFull date & time (long)December 10, 2002 10:11:29 PMgDefault date & time10/12/2002 10:11 PMGDefault date & time (long)10/12/2002 10:11:29 PMMMonth day patternDecember 10rRFC1123 date stringTue, 10 Dec 2002 22:11:29 GMTsSortable date string2002-12-10T22:11:29uUniversal sortable, local time2002-12-10 22:13:50ZUUniversal sortable, GMTDecember 11, 2002 3:13:50 AMYYear month patternDecember, 2002

The 'U' specifier seems broken; that string certainly isn't sortable.

Custom date formatting:

 

SpecifierTypeExampleExample OutputddDay{0:dd}10dddDay name{0:ddd}TueddddFull day name{0:dddd}Tuesdayf, ff, ...Second fractions{0:fff}932gg, ...Era{0:gg}A.D.hh2 digit hour{0:hh}10HH2 digit hour, 24hr format{0:HH}22mmMinute 00-59{0:mm}38MMMonth 01-12{0:MM}12MMMMonth abbreviation{0:MMM}DecMMMMFull month name{0:MMMM}DecemberssSeconds 00-59{0:ss}46ttAM or PM{0:tt}PMyyYear, 2 digits{0:yy}02yyyyYear{0:yyyy}2002zzTimezone offset, 2 digits{0:zz}-05zzzFull timezone offset{0:zzz}-05:00:Separator{0:hh:mm:ss}10:43:20/Separator{0:dd/MM/yyyy}10/12/2002Enumerations

 

SpecifierTypegDefault (Flag names if available, otherwise decimal)fFlags alwaysdInteger alwaysxEight digit hex.Some Useful Examples

String.Format("{0:$#,##0.00;($#,##0.00);Zero}", value);

This will output "$1,240.00" if passed 1243.50. It will output the same format but in parentheses if the number is negative, and will output the string "Zero" if the number is zero.

String.Format("{0:(###) ###-####}", 18005551212);

This will output "(800) 555-1212".

 

变量.ToString()


字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

再添加一点

格式字符     名称     说明    
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

e-0
  科学计数法
  如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学计数法来格式化,在数字和指数之间插入“E”或“e”。跟在科学计数法指示符后面的“0”字符数确定指数输出的最小位数。“E+”和“e+”格式指示符号字符(正号或负号)应总是置于指数前面。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。
 
\
  转义符
  在   C#   和   C++   中,反斜杠字符使格式字符串中的下一个字符被解释为转义序列。它与传统的格式化序列一起使用,如“\n”(换行)。

在某些语言中,转义符本身用作文本时必须跟在转义符之后。否则,编译器将该字符理解为转义符。使用字符串“\\”显示“\”。

请注意,Visual   Basic   中不支持此转义符,但是   ControlChars   提供相同的功能。
 
'ABC '

"ABC "
  字符串
  引在单引号或双引号中的字符被原样复制到输出字符串中,而且不影响格式化。
 
;
  部分分隔符
  “;”字符用于分隔格式字符串中的正数、负数和零各部分。
 
其他
  所有其他字符
  所有其他字符以文本形式复制到输出字符串中它们出现的位置。

转载于:https://www.cnblogs.com/handboy/p/7158360.html

<think>好的,我现在要解决的问题是关于CTF比赛中eval函数的括号和点号绕过,以获取flag。首先,我得回忆一下eval函数在PHP中的使用以及常见的绕过技巧。 用户提到的“eval括号和点绕过”可能是指在不使用括号()和点号.的情况下执行代码。通常,eval会执行传入的字符串作为PHP代码,所以如果题目过滤了这些字符,就需要找到替代方法来执行命令或读取文件。 首先,PHP中执行函数确实通常需要括号,比如system("ls")。但如果没有括号,是否可以用其他方式调用函数?我记得在PHP中,可以使用可变函数或者通过字符串拼接来绕过。例如,如果允许使用变量,可能通过$func = "system"; $func("ls");,但这里仍然需要括号。不过如果括号被过滤,可能需要别的方法。 另外,点号.在字符串拼接中被使用,比如"fla"."g"等同于"flag"。如果点号被过滤,可以使用花括号{}或者直接连接字符串,不过PHP中如果没有点号的话,可能无法拼接字符串。这时候有没有其他方法?比如使用printf函数或者sprintf来格式化字符串,或者利用数组来构造字符串? 例如,使用数组来获取字符。假设我们需要得到字符‘a’,可以通过数组访问的方式,像$_GET['a'][0],但这种方法需要特定的输入。或者使用chr函数来生成字符,再组合成字符串。比如chr(102).chr(108)等等,但如果点号被过滤,可能需要用其他方式连接。 接下来,关于eval函数的参数。如果题目中的eval接收的输入被过滤了括号和点号,比如用户需要提交一个没有括号和点号的payload,使其被eval执行后能读取flag。这时候可能需要寻找PHP中可以执行代码的其他结构。 例如,PHP中有一些语言结构不需要括号,比如echo,但eval执行的是表达式,所以可能不太适用。或者,使用反引号执行命令,比如`ls`,这等同于shell_exec函数。但反引号是否被允许?如果题目允许的话,可能可以绕过。 另外,PHP中的变量变量可能有帮助。例如,$$var的形式,但需要构造变量名。或者,使用包含函数(如include)来包含文件,但如果需要动态生成文件名,可能需要字符串操作。 假设题目代码大致如下: <?php $input = $_GET['exp']; if(preg_match('/[\.\(\)]/', $input)) { die('Hacker!'); } eval($input); ?> 这时候,用户的输入exp不能包含点号、括号。那么如何构造一个可以读取flag的payload? 首先,考虑执行系统命令。例如,想要执行system("cat flag.php"),但这里有括号和点号都被过滤了。所以需要替代方法。 不使用括号调用函数的方法:在PHP中,如果使用可变函数,比如$_GET['a']($argv),但调用时仍然需要括号。或者,是否存在可以不用括号的函数或结构? 或者,使用create_function,但create_function也需要参数,可能涉及括号。 另一个思路是利用PHP的短标签,但需要服务器配置允许。例如,<?= `ls` ?>,但可能被过滤。 或者,使用反引号执行命令。例如,直接提交`ls`,但需要确保在eval中这个被视为可执行代码。比如,eval('echo `ls`;'); 但如果能构造这样的字符串,但问题是没有点号和括号的情况下如何构造命令。 或者,利用PHP的变量赋值。例如,先给变量赋值,然后通过拼接或其它方式执行。例如: $a = 'sys'; $b = 'tem'; $c = $a.$b; $c = 'ls'; 但这里需要点号来拼接$a和$b,而点号被过滤了,所以不行。 如果不能用点号,那么如何拼接字符串?比如,使用数组连接的方式,或者利用字符串插值? 例如,假设可以构造字符串"system"通过其他方式,比如使用chr函数。例如: $func = chr(115).chr(121).... 这样,但这里仍然需要点号来连接chr的结果,所以不可行。 那有没有其他方式不用点号也能生成字符串?比如使用implode函数处理数组: $arr = array('s','y','s','t','e','m'); $func = implode($arr); 但是如何在不使用点号和括号的情况下调用implode? 或者,利用预定义的变量或者超全局变量中的字符。例如,$_SERVER、$_GET等变量中的某些字符,通过提取组合。比如,$_GET的参数名可以作为字符串的一部分,但可能需要复杂的操作。 或者,利用PHP中的字符串特性,比如使用花括号语法访问字符串中的字符。例如,$a = 'abcdef'; $a[0]就是'a',然后如何组合这些字符?但需要拼接,而点号被禁用,所以可能不行。 或者,考虑使用异或或者取反来构造字符串。例如,PHP中可以使用异或运算符来生成字符,这样不需要点号拼接,但需要复杂的运算。 例如,比如在PHP中,'a' ^ '}' 的结果是某个字符,但这种方法可能需要先构造出想要的字符串。不过这可能比较复杂,特别是没有括号的情况下如何执行函数。 另一个思路是,使用无需括号的语言结构,比如echo,但eval中需要有效的表达式。或者,直接php代码,如?><?= `ls`?>,但可能被过滤。 或者,如果eval的参数被包裹在某个上下文中,比如被当作代码的一部分,可能可以构造一个无需括号的表达式。例如,利用PHP的assert函数,但assert在PHP7.1之后可能行为不同,且同样需要括号。 或者,考虑使用include来包含文件,假设可以构造文件名,比如使用data协议,但需要括号和点号可能被过滤。 例如,include 'data://text/plain;base64,'.base64_encode('<?php system("ls"); ?>'); 但这里又需要点号。 如果所有括号都被过滤,那么调用函数将非常困难,因为函数调用必须使用括号。 这个时候,可能需要寻找无需调用函数的方法来读取文件。例如,使用highlight_file、readfile等函数,但同样需要括号。 有没有可能绕过括号的限制?例如,使用变量函数,但调用时仍需要括号。例如: $func = 'system'; $func 'ls'; 这样的语法是错误的,必须要有括号。 看来在PHP中,函数调用必须使用括号,所以如果括号被完全过滤,可能无法直接调用函数。这个时候可能需要寻找其他方式。 或者,是否存在PHP的某些版本或配置中,可以允许无括号调用函数?比如,PHP的某些特性或漏洞,但我不记得有这样的情况。 这时候可能需要寻找替代的PHP语法或结构,例如,使用反引号,但反引号内的内容会被当作shell命令执行,等同于shell_exec的结果。例如: eval('echo `ls`;'); 这里,如果exp参数是'echo `ls`;',那么可能执行ls命令。但这里是否可行?需要测试。 如果题目过滤了括号和点号,那么构造的payload中不能有这两个字符。例如,`ls` 反引号不包含括号或点号,因此可以尝试。 假设exp参数是`echo `ls`;`,但由于eval的参数是字符串,所以需要正确的PHP语法。正确的法应该是: eval('echo `ls`;'); 但这样的话,如果用户提交的exp是'echo `ls`;',那么会被执行,输出ls的结果。但这里需要确保echo和反引号没有被过滤。 如果题目允许的话,可能直接执行命令。例如,提交的exp为`echo `cat flag.php`;`,但需要注意反引号内的内容会被执行,所以如果flag在flag.php中,可能需要查看源代码,或者使用其他命令如tac、more、less等。 不过,这种方法的关键在于,是否能够在eval的参数中构造一个有效的PHP语句,且不包含括号和点号。例如: `echo `cat flag`;` 这里,反引号中的cat flag会被执行,然后echo输出结果。但PHP中的反引号执行命令并返回输出,所以直接执行的话,可能不需要echo。例如,直接 `cat flag`; 但在eval中,这样会被视为PHP代码,而反引号的结果会被当作字符串,所以需要将其输出,比如通过echo或者直接作为表达式的结果,如果启用了结果输出的话。 例如,假设eval的参数是 `echo `cat flag.php`;`,那么在eval执行时,会执行cat命令,将结果输出。不过,这种情况下,如果flag.php的内容是<?php echo 'flag'; ?>,那么输出可能包含PHP代码,但被解析了。因此可能需要查看源代码,或者使用其他方法如highlight_file等。 但回到问题,如果eval的参数必须不包含括号和点号,那么使用反引号可能是一个有效的方法,因为它不需要括号,除非反引号被过滤。假设反引号没有被过滤,那么可以构造这样的payload。 例如,假设题目允许执行: exp=echo `cat flag`; 那么提交后,eval执行这段代码,会输出flag的内容。但需要注意,PHP中反引号内的内容会被当作shell命令执行,并返回输出。但这里是否需要有分号?在eval的参数中,代码应该是合法的PHP语句,所以正确的形式应该是: eval('echo `cat flag`;'); 所以提交的exp参数应该是echo `cat flag`;,这样就不会有括号或点号,对吗?是的,这样构造的payload就绕过了对括号和点号的过滤。 因此,在这种情况下,利用反引号执行命令是可行的。例如,构造payload为:?exp=echo `cat flag.php`; 但需要注意,如果flag.php中有PHP代码,比如<?php $flag="abc"; ?>,那么直接输出可能看不到,因为PHP会解析。因此,可能需要读取文件的函数,比如使用php://filter来读取源码,但这样需要更多的构造,同时是否使用括号的问题。 或者,直接使用cat命令读取flag.php的内容,如果服务器是Linux系统的话,这可能有效。 总结来说,绕过括号和点号的关键点可能是利用反引号执行系统命令,或者找到其他不需要括号的PHP函数或语法结构。此外,可能还需要字符串构造的技巧,比如使用异或、取反或者数组来生成所需的函数名或命令字符串,但需要确保不涉及被过滤的字符。 另外,可能还有其他绕过方法,比如利用PHP的动态函数调用,但需要括号,所以可能不可行。或者,利用include结合伪协议,但如果文件名需要拼接,可能需要点号,所以也不容易。 因此,最直接的绕过方法可能是使用反引号执行系统命令,从而避免使用括号和点号。例如,构造如下的payload: exp=echo `cat flag`; 或者,如果允许直接执行命令的话,甚至可以直接`cat flag`;,但需要确保在eval中这是一个有效的表达式。例如,在PHP中,`cat flag`; 会被解析为执行命令并返回结果,但如果没有赋值或输出的话,结果可能不会显示。所以可能需要echo或者其他的输出机制。 因此,最终的payload可能类似于: ?exp=echo `cat flag.php`; 这应该能够在没有括号和点号的情况下执行系统命令,获取flag。</think>在CTF比赛中,绕过`eval`函数对括号`.`和点号`.`的过滤,通常需要利用PHP的语法特性或系统命令执行。以下是一种常见方法及示例: --- ### **核心思路:利用反引号执行命令** PHP中反引号(\`\`)可执行系统命令并返回输出,**无需括号和点号**。若目标过滤了这些字符,可构造如下Payload: ```php echo `cat flag.php`; ``` - **解释**:反引号内的`cat flag.php`会直接执行系统命令,读取`flag.php`内容。`echo`用于输出结果。 --- ### **绕过示例** 假设题目代码过滤了括号`.`和点号`.`,允许用户输入参数`exp`执行`eval`: ```php <?php $input = $_GET['exp']; if(preg_match('/[\.\(\)]/', $input)) { die('过滤了括号和点号!'); } eval($input); ?> ``` **Payload构造**: 通过URL传递参数,直接执行命令读取flag: ``` http://example.com/?exp=echo%20`cat%20flag.php`; ``` --- ### **其他绕过技巧** 1. **字符串构造**: 若需动态生成字符串(如函数名),可用`chr`函数结合异或、取反操作(无需点号): ```php $f=chr(115)^chr(15); // 生成字符's'(需具体计算) $f(); ``` 2. **超全局变量**: 利用`$_GET`参数传递函数名或命令: ``` ?exp=echo%20`$_GET[0]`;&0=cat%20flag.php ``` 3. **伪协议读取文件**: 若允许文件操作,用`php://filter`读取源码(可能需要绕过其他过滤): ```php readfile(end(current(get_defined_vars())));&0=php://filter/read=convert.base64-encode/resource=flag.php ``` --- ### **注意事项** - **命令回显**:确保结果能输出(如通过`echo`或直接返回命令结果)。 - **特殊符号转义**:URL中需对空格、引号等字符进行编码(如`%20`代替空格)。 - **过滤规则**:需确认题目是否过滤了反引号、分号等关键字符。 通过灵活组合系统命令执行和PHP动态特性,可绕过字符限制获取flag。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值