SGIP消息头 Command ID 4 Integer 命令ID 但是SGIP_BIND_RESP 定义是0×80000001。
结果:sgipmsg.cs(40,21): error CS0221: 常数值“2147483649”无法转换为“int”(使用“unchecked”语法重写)

在.NET中:int -2,147,483,648 到 2,147,483,647 有符号 32 位整数 System.Int32
int 数据类型存储为四字节整数。

int 类型可以表示负 2,147,483,648 至正 2,147,483,647 范围内(包括这两个数)的整数。

unchecked 关键字用于控制整型算术运算和转换的溢出检查上下文。它可以按照下列形式用作运算符或语句。
unchecked block
unchecked 运算符:

unchecked (expression)
其中:
block
包含要在未检查上下文中计算的表达式的语句块。
expression
要在未检查上下文中计算的表达式。注意表达式必须位于括号 ( ) 内。
备注
在未检查的上下文中,如果表达式产生目标类型范围之外的值,则结果被截断。

如果既未使用 checked 也未使用 unchecked,则在编译时常数表达式使用默认溢出检查(即 checked)。否则,如果表达式为非常数,则运行时溢出检查取决于其他因素(如编译器选项和环境配置)。

下面三个示例演示 checked 语句和 unchecked 语句。所有这三个示例都使用相同的算法,但使用不同的检查上下文。这三个示例使用的是常数表达式,因此在编译时计算溢出检查。

只有 unchecked 语句产生截断的值。其他两个语句产生编译时错误。

警告:The operation overflows at compile time in checked mode.

uint 类型存储为四字节的无符号整数。

uint 类型可以表示 0 至 4,294,967,295 范围内(包括这两个数)的整数。

相应的 .NET Framework 数据类型为 System.UInt32。uint 数据类型的属性和方法与 System.UInt32 属性和方法相同。
TestCase \’M:SGIPSP.SGIP.SGIPMsg.testt\’ failed: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。
 System.FormatException: 索引(从零开始)必须大于或等于零,且小于参数列表的大小。
 at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
 at System.String.Format(IFormatProvider provider, String format, Object[] args)
 at System.String.Format(String format, Object[] args)
p:\\cvswork\\work\\sgipsp\\sgip\\sgipmsg.cs(475,0): at SGIPSP.SGIP.SGIPMsg.testt()0 succeeded, 1 failed, 0 skipped, took 0.04 seconds.

疯了,居然写出如此代码:Trace.WriteLine(string.Format("&leftsign;0&rightsign;,&leftsign;1&rightsign;,&leftsign;2&rightsign;,&leftsign;3&rightsign;,&leftsign;4&rightsign;,&leftsign;5&rightsign;,&leftsign;6&rightsign;,&leftsign;7&rightsign;","1","2","3","4","5","6","7")); 不会数数了。

Trace.WriteLine(string.Format("&leftsign;0&rightsign;,&leftsign;1&rightsign;","1\\0\\0","2")); 这样的话,后面的2没有了,并且WRITELINE得换行符也没有了。

历史博文

标签:,
七月 4, 2005 at 2:09 下午 by yippee 1,032 次
Category: Dev
Tags: ,