一个看起来比较简单的问题

Hassle 2005-10-23 06:21:33
chr(-12127)="小" '&H23567

内部是如何实现的?
...全文
127 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hassle 2005-10-24
  • 打赏
  • 举报
回复
这样理解对不对?

Option Explicit

Private 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 Sub

Private 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

不好意思,更正一下
Hassle 2005-10-24
  • 打赏
  • 举报
回复
这样理解对不对?

Option Explicit

Private 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 Sub

Private 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
northwolves 2005-10-23
  • 打赏
  • 举报
回复
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 Sub

2 国家标准信息交换用汉字字符集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

jxgzay 2005-10-23
  • 打赏
  • 举报
回复
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
孙小雄 2005-10-23
  • 打赏
  • 举报
回复
Chr 函数
0 到 31 之间的数字与标准的非打印 ASCII 代码相同。例如,Chr(10) 可以返回换行字符。charcode 的正常范围为 0 – 255。 "小" 这个符号字符 是由 208 161 两个 ASCII 码值代表 然而,在 DBCS 系统,charcode 的实际范围为 -32768 到 65535。

DBCS
使用 1 或 2 字节来表示一字符的字符集,超过个 256 字符也可表示。





Hassle 2005-10-23
  • 打赏
  • 举报
回复
斑竹可以帮忙看看吗?

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧