chr(-12127)="小" '&H23567内部是如何实现的?

解决方案 »

  1.   

    Chr 函数
    0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。charcode 的正常范围为 0 – 255。 "小" 这个符号字符 是由 208 161 两个 ASCII 码值代表 然而,在 DBCS 系统,charcode 的实际范围为 -32768 到 65535。DBCS
    使用 1 或 2 字节来表示一字符的字符集,超过个 256 字符也可表示。
      

  2.   

    Private Sub Command1_Click()
    s1 = "小"
    s2 = StrConv(s1, vbFromUnicode)
    s3 = MidB(s2, 1, 1) + MidB(s2, 2, 1)
    s4 = StrConv(s3, vbUnicode)Print s4
    '答案:小End Sub
      

  3.   

    1.  "小"的汉字内码 D0A1(即两个字节分别为208,161),而 &HD0A1=-12127,它的UNICODE编码就是"小"
    Private Sub Command1_Click()
    Dim b(1) As Byte
    b(0) = 208 'HD0
    b(1) = 161 ' HA1
    MsgBox StrConv(b, vbUnicode)
    End Sub2 国家标准信息交换用汉字字符集GB 2312-80共收录了汉字、图形符号等共7445个,其中汉字6763个,按照汉字使用的频度分为两级,其中一级汉字3755个,二级汉字3008个。汉字、图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为“位”。其中“区”的序号由01区至94区,“位”的序号也由01位至94位。若以横向表示“位”号,纵向表示“区” 号,则“区”和“位”构成一个二维坐标。给定一个“区”值和“位”值就可以确定一个惟一的汉字或图形符号。即4位阿拉伯数字就可以惟一地确定一个汉字或符号。如“北”字的区位码是“1717”,而京字的区位码是“3009”。前两位是“区”号,后两位是“位”号。其中1至15区是各种图形符号、制表符和一些主要国家的语言字母,16区至87区是汉字,其中16区至55区是一级汉字,56至87区是二级汉字。系统中"小" 的区位码4801,asc(-12127),即asc(&HD0A1)从48 区 1 位 读取之.Function quwei(ByVal x As String) As String '获得某汉字或字符对应的的区位码
    If Asc(x) >= 0 Then Exit Function
    x = Hex(Asc(x))
    quwei = Format(CDec("&H" & Left(x, 2)) - 160, "00") & Format(CDec("&H" & Right(x, 2)) - 160, "00")
    End Function
    Function hanzi(ByVal x As String) As String '获得某区位码对应汉字或字符
    hanzi = Chr("&H" & Hex(Val(Left(x, 2)) + 160) & Hex(Val(Right(x, 2)) + 160))
    End Function
      

  4.   

    这样理解对不对?Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Text1_KeyPress(KeyAscii As Integer)
        Text2.Text = MyChr(KeyAscii)
    End SubPrivate Function MyChr(ByVal CharCode As Long) As String
        Dim a(0 To 1) As Byte, b As Byte
        CopyMemory a(0), KeyAscii, 2
        If KeyAscii < 0 Then
            b = a(0)
            a(0) = a(1)
            a(1) = b
        End If
        MyChr = StrConv(a, vbUnicode)
    End Function
      

  5.   

    这样理解对不对?Option ExplicitPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Text1_KeyPress(KeyAscii As Integer)
        Text2.Text = MyChr(KeyAscii)
    End SubPrivate Function MyChr(ByVal CharCode As Long) As String
        Dim a(0 To 1) As Byte, b As Byte
        CopyMemory a(0), CharCode, 2
        If CharCode < 0 Then
            b = a(0)
            a(0) = a(1)
            a(1) = b
        End If
        MyChr = StrConv(a, vbUnicode)
    End Function不好意思,更正一下