现在碰到一个很奇怪的问题: 有个c++build编写的dll文件,有个参数为buffer:(unsigned char*) 类型,大小为64个字节,
1.在vb中我将它定义成byte,报xxxx地址不能write,但是硬件数据已经正确返回来了
2.如果定义成string ,不报错,但是将字符一个个转化成十六进制数时,数据不对。
在delphi中定义字符正确返回为:
嘃%k4?'#0'F?'#$17'YPH'#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#
0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0''#7'€i
但是在vb中为:
嘃%k4? F?YPH €i
前面几个数据好象接收不对啊???? 如何解决啊???
1.在vb中我将它定义成byte,报xxxx地址不能write,但是硬件数据已经正确返回来了
2.如果定义成string ,不报错,但是将字符一个个转化成十六进制数时,数据不对。
在delphi中定义字符正确返回为:
嘃%k4?'#0'F?'#$17'YPH'#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#
0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0''#7'€i
但是在vb中为:
嘃%k4? F?YPH €i
前面几个数据好象接收不对啊???? 如何解决啊???
dim buff() as Byte
dim str as Stringbuff = str
...
好像是Dephi中把“看不见的”字符放在单引号里输出了,#后面的就是ASCII码吧?
用VB的String当然只能看到可见字符,看不见的字符都当成空格输出了
buffer:(unsigned char*)
如果采用Byte数组,则
用 Byref btBuf() as Byte做参数. 注意关键字是Byref
如果采用String,则
调用后将String转换成Byte数组,转换方式用For循环.比如:
For i=1 to len(StrBuf)
btBuf(i-1)=cbyte(asc(mid(strBuf,i,1)))
next
For i=1 to len(StrBuf)
btBuf(i-1)=cbyte(asc(mid(strBuf,i,1)))
next取出strbuf后,当i才等于1就报错:"溢出”错误啊
不报错才怪, 你看看 asc(mid(strbuf,i,1))是不是大于255了,大于肯定报错, 注意len,mid,asc,都是按unicode来取的,字符级操作,你可以用b版本的字节操作, 更改如下
redim btBuf(lenb(strBuf)-1) as byte
for i=1 to lenb(strbuf)
btBuf(i-1) = ascb(midb(strbuf,i,1))
next i
这个cbyte是多余的, ascb返回本来就是byte型
你的也报错啊
Dim btbuf() As Byte
strbuf = "嘃%k4? F?YPH €i"
For i = 1 To LenB(strbuf)
btbuf(i - 1) = AscB(MidB(strbuf, i, 1))
Next i
/// TO : pigsanddogs(我爱吃猪肉,但是长不胖,为什么??)
你的也报错啊
dim buffer(63) as byte 程序运行到此函数调用后报
某某地址不能读.
Dim btbuf() As Byte
Redim btbuf(LenB(strbuf)-1) as Byte '// <------ u should add this line
strbuf = "嘃%k4? F?YPH €i"
For i = 1 To LenB(strbuf)
btbuf(i - 1) = AscB(MidB(strbuf, i, 1))
Next i
/// TO : pigsanddogs(我爱吃猪肉,但是长不胖,为什么??)
你的也报错啊呵呵你里面少写了句。 在for 前面没有redim btbuf(lenb(strbuf)-1) as byte 你看看前面某某地址不可读? 你把你程序帖出来好吗?