如果你要纠结这种格式,意思就是要输出字符串类型,那就可以通过各种字符串函数来处理,并不需要.net自带的方法。
成都创新互联公司是一家专业从事网站制作、成都网站建设、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,成都创新互联公司依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!
o这是因为有字节对齐的问题。每一个变量的首地址必须是它所占字节长度的倍数。
比如int32长度是4,那么它的首地址只能取0,4,8,12……
下面的图形象的表示了MSG在内存中的储存情况:
OOXXOOOO
第一个和第二个O表示两个BYTE类型的数据,两个X表示空地址,里面什么也没放。后面四个OOOO便是一个int32类型数据也就是Code。加起来总共占了8个字节的内存
上面思路是正确的, 用ascw 函数也可以
private function LenC( ps as string ) as Integer
Dim n As Integer
Dim StrLen As Integer
For n = 1 To Len(Text1.Text)
If Ascw(Mid(Text1.Text, n, 1)) 256 Then
StrLen = StrLen + 2
Else
StrLen = StrLen + 1
Next n
return strLen
end function
str(22)把数字22转化为字符串后,系统自动在22前增加一个空格,即符号位(因为正号只占位),如果是负数则用-号占用符号位,所以str(22)的结果是“ 22”,长度为3。
后面的str(3)=" 3",str(2)=" 2",它们的字符串的长度都是2(包括了一个符号位空格)。
所以:Len(Str(22) + Str(3) + Str(2))=len(" 22"+" 3"+" 2")=len(" 22 3 2")=7
遍历每一个字符,看是全角还是半角的。半角的字符总数 +1,全角的字符总数 +2。
参考:
Public Function GetByteLength(ByVal value As String) As Long
Dim i As Long = 0
For Each c As Char In value
If (c.ToString().Length = System.Text.Encoding.Default.GetByteCount(value.ToString())) Then
i = i + 1
End If
i = i + 1
Next
Return i
End Function