如何将汉字转化为16进制的数据

sinos_sinos 2005-01-05 06:29:49
如何将汉字转化为16进制的数据

同时把转换的16进制的数据 写如内存中

后再 把16进制的数据 用字符串方式显示出来 (存取的过程其实)
...全文
884 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiqi5521 2005-01-08
  • 打赏
  • 举报
回复
我修改了一下那个程序。大概可以用了。由于没有dll,没有完全调通,可能还需要你的修改。
请到我的主页下载源代码:
http://lqweb.crcoo.com/mycode/ReadBlock.rar


northwolves 2005-01-06
  • 打赏
  • 举报
回复
COPYMEMORY
qiqi5521 2005-01-06
  • 打赏
  • 举报
回复
你的这个函数
'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _ '句柄
ByRef cardID As Byte, _ '卡号
ByVal nAddress As Long, _ '开是地址
ByVal nLen As Long, _'一次写的字节长度
ByRef DB As rfs_DataBlock _ 欲写如入的数据
) As apiReturn

这两个:
ByVal nAddress As Long, _ '开是地址
ByRef DB As rfs_DataBlock _ 欲写如入的数据
哪一个是写入数据的地方?

若是第一个:ByVal nAddress As Long,你就这样调用 Varptr(a(0)),就可以把数组的基地址传过去。
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), Varptr(a(0)), 1, DB(0))


若是第二个:ByRef DB As rfs_DataBlock,我猜想 Value 可能是个指针吧?让Value=varptr(a(0))试一下.
DB(0).value=Varptr(a(0))
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), CLng(writeAddress), 1, DB(0))
qiqi5521 2005-01-06
  • 打赏
  • 举报
回复
那个读卡程序我看不太明白。我写了一个字符串变字节数组的程序,你试一下是否能对你有帮助。
把那个子节数组写入到你要写入的地方,然后读出还原就可以了。
先下载个文件添加到你的工程中:
http://lqweb.crcoo.com/mycode/BitEx11.bas

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Command1_Click()
Dim s As String
Dim a() As Byte
Dim i As Long
Dim str2 As String

'字符串变字节数组
s = "中国China"
ReDim a(0 To Len(s) * 2 - 1)
CopyMemory ByVal VarPtr(a(0)), ByVal StrPtr(s), Len(s) * 2

'字节数组变字符串
str2 = ""
For i = 0 To UBound(a) Step 2
str2 = str2 & ChrW(Con(a(i + 1), a(i)))
Next
MsgBox str2
End Sub



sinos_sinos 2005-01-06
  • 打赏
  • 举报
回复
Type apiReturn
apiReturn As Integer
End Type

' 数据块结构
Type rfs_DataBlock
Value As Long ' 读出或写入数据值
IsOk As Long ' 返回读写是否成功
End Type

' 读数据块
Declare Function rfs_ReadDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _
ByRef cardID As Byte, _
ByVal nAddress As Long, _
ByVal nLen As Long, _
ByRef DB As rfs_DataBlock _
) As apiReturn

'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _
ByRef cardID As Byte, _
ByVal nAddress As Long, _
ByVal nLen As Long, _
ByRef DB As rfs_DataBlock _
) As apiReturn


VB里的声明
sinos_sinos 2005-01-06
  • 打赏
  • 举报
回复
数据块结构
typedef struct tagDataBlock
{
unsigned int Value; // 读出或写入数据值
unsigned int IsOk; // 返回读写是否成功
} rfs_DataBlock;


写一个数据块
apiReturn rfs_PutDataBlock(HANDLE hScanner, BYTE *CardID, int nAddress, int nLen, rfs_DataBlock *DB)
功能:
向电子标签上一段连续地址内存写数据。写入数据长度以字节为单位,一次最多写入16个字节。用户可写的字节地址为8~223。
入口参数:
hScanner:读写器句柄
CardID:欲写的标签ID号
nAddress:写标签内存的开始地址(8~223)
nLen:数据块长度,即一次写多少个字节( ≤ 16)
DB:欲写的数据
注意:nLen必须 ≤ 16。 (nAddress+nLen) ≤223。
在读/写SCS标签数据时,标签内存地址nAddress和数据长度nLen必须是4Bytes的倍数。


读数据块
apiReturn rfs_ReadDataBlock(HANDLE hScanner, BYTE *CardID, int nAddress, int nLen, rfs_DataBlock *DB)
rfs_ReadDataBlock(HANDLE hScanner, int nAddress, int nLen,RFS_DataBlock *DB);
功能:读取电子标签上一段连续地址内存中的数据。ISO18000电子标签的内存容量为2048bits,即256个字节。
用户可读取的字节地址为0~223。数据块长度以字节为单位,规定每次最多读32个字节。
入口参数:
hScanner:读写器句柄
CardID:欲读的标签ID号
nAddress:读取标签内存的开始地址(0~223)
nLen:数据块长度,即一次读取多少个字节( ≤ 32)
出口参数:
DB.IsOk:返回每个单元是否读取成功
DB.Value,返回每个单元读取的数据
注意:nLen必须 ≤ 32。 (nAddress+nLen) ≤223。
在读/写SCS标签数据时,标签内存地址nAddress和数据长度nLen必须是4Bytes的倍数。

以上是原型

sinos_sinos 2005-01-06
  • 打赏
  • 举报
回复
数据块结构
typedef struct tagDataBlock
{
unsigned int Value; // 读出或写入数据值
unsigned int IsOk; // 返回读写是否成功
} rfs_DataBlock;

写一个数据块
apiReturn rfs_PutDataBlock(HANDLE hScanner, BYTE *CardID, int nAddress, int nLen, rfs_DataBlock *DB)
入口参数:
hScanner:读写器句柄
CardID:欲写的标签ID号
nAddress:写标签内存的开始地址(8~223)
nLen:数据块长度,即一次写多少个字节( ≤ 16)
DB:欲写的数据
注意:nLen必须 ≤ 16。 (nAddress+nLen) ≤223。标签内存定义见表1-1,表1-2,表1-3。在读/写SCS标签数据时,标签内存地址nAddress和数据长度nLen必须是4Bytes的倍数。

这是原型
sinos_sinos 2005-01-06
  • 打赏
  • 举报
回复
Public Const RFS_ID_MAX_SIZE = 8 '电子标签的ID号最多8字节(64bits)
Public Const rfs_OK = &H0
'操作成功
Type apiReturn
apiReturn As Integer
End Type

Type rfs_DataBlock
Value As Long ' 读出或写入数据值
IsOk As Long ' 返回读写是否成功
End Type

'写数据块
Declare Function rfs_PutDataBlock Lib "RFSAPIV2.dll" ( _
ByVal hScanner As Long, _ '句柄
ByRef cardID As Byte, _ '卡号
ByVal nAddress As Long, _ '开是地址
ByVal nLen As Long, _'一次写的字节长度
ByRef DB As rfs_DataBlock _ 欲写如入的数据
) As apiReturn

现在我想把 TEXT1.TEXT 内容(中英文混合同时有数字)写入 是通过rfs_PutDataBlock 完成
如果写成功了 把写入的内容在LIST 显示出来

Dim I As Integer
Dim DB(2) As rfs_DataBlock
Dim wd As String
wd = "&H" & writeData '(TEXT)的内容
DB(0).Value = CLng(wd)
For I = 0 To 2 Step 1
res = rfs_PutDataBlock(m_hScanner, IDBuffer.num(idNum * RFS_ID_MAX_SIZE), CLng(writeAddress), 1, DB(0))
If res.apiReturn = rfs_OK Then
Exit For
End If
Next I
If res.apiReturn = rfs_OK Then
List1.AddItem CStr(DB(0).Value)
Else
MsgBox "写数据字失败!", vbExclamation
End If

只能单个写入 16进制的值 上面的程序

现在要写 字符串(中英文 数字) 给点思路 就可以谢谢
sinos_sinos 2005-01-05
  • 打赏
  • 举报
回复
qiqi5521 帮了一半算是 汉字机内码 是16进制的吧呵呵 如 ABCD 就是一个汉字?

其实我是想把汉字 通过TEXT.TEXT 写入一个TAG(标签可以存储内容的)

的内存地址里 是要把多个汉字和英文及数字 写进去的 然后在读到 计算机的程序中显示

说白了 把混合字符 通过计算机界面程序 写如TAG里 在从TAG读出来 在电脑显示出来

说说啦大家 可以加分
sinos_sinos 2005-01-05
  • 打赏
  • 举报
回复
谢谢大家的支持

等我调看看 再分分给大家

特别谢谢 qiqi5521()
dyshadow 2005-01-05
  • 打赏
  • 举报
回复
楼上,你的这个输出有什么意思?楼主的意思好象要将一个汉字变成两个BYTE,可能要对其进行操作,然后存储。
len(s)也只有2
qiqi5521 2005-01-05
  • 打赏
  • 举报
回复
刚才没调试,现在调试了一下,可以的。不知是不是你要的?


Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Command1_Click()
Dim s As String
Dim a() As Integer
s = "中国"
ReDim a(0 To Len(s) - 1)
CopyMemory ByVal VarPtr(a(0)), ByVal StrPtr(s), LenB(s)

MsgBox ChrW(a(0))
MsgBox ChrW(a(1))
End Sub
qiqi5521 2005-01-05
  • 打赏
  • 举报
回复
如果是多个汉字,最好用一个数组
dim s as string
dim a() as integer
s="中国"
redim a(0 to len(s)-1)
copymemory byval varptr(a(0)),byval strptr(s),lenB(s)
qiqi5521 2005-01-05
  • 打赏
  • 举报
回复
将汉字转化为16进制的数据
dim i as integer
i=ascw("中")

把16进制的数据 用字符串方式显示出来
msgbox chrw(i)
Gujianda 2005-01-05
  • 打赏
  • 举报
回复
仍然以汉字的形式显示吗?那更本不用转换。不懂!
wwqna 2005-01-05
  • 打赏
  • 举报
回复
十进制转成十六进制用hex函数

debug.print hex(16)
wwqna 2005-01-05
  • 打赏
  • 举报
回复
汉字也没有什么特别的呀,也就是两个byte呀!
Dim Arrstr(3) as byte
open "d:\1.txt" for binary Access write as #1
Put #1,,"中国"
close #1
Open "d:\1.txt" for binary Access read as #1
Get #1,,arrstr
Close #1
debug.print Strconve(arrstr,vbUnicode)

' 代码没有调试的,你试一下吧

1,066

社区成员

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

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