129到255代码对应的字符为西文的扩展字符,以下代码:
Dim Btemp(3) As Byte
Dim Strtemp As String
Btemp(0) = 99
Btemp(1) = 27
Btemp(2) = 177
Btemp(3) = 178
Strtemp = StrConv(Btemp, vbUnicode)在打印机的检测模式下,对Strtemp进行十六进制检测,结果为:63 1B B1 B2
显然,结果说明VB没有对Btemp数值进行更改.结果是正确的.而以下代码:
Dim Btemp(3) As Byte
Dim Strtemp As String
Btemp(0) = 99
Btemp(1) = 27
Btemp(2) = 177
Btemp(3) = 38
Strtemp = StrConv(Btemp, vbUnicode)测试出来的结果却是:63 1B 3F,如果VB没有做小动作,那么正确的结果是:63 1B B1 26
经过反复测试发现,如果大于129的字节后面,跟的不是同样大于129的字节的话,VB会对数值进行转换....
也就是说,打印机会接收到错误的代码,打印出错误的字符.请问该怎么做,才能让VB不要这么"多此一举"呢?
Dim Btemp(3) As Byte
Dim Strtemp As String
Btemp(0) = 99
Btemp(1) = 27
Btemp(2) = 177
Btemp(3) = 178
Strtemp = StrConv(Btemp, vbUnicode)在打印机的检测模式下,对Strtemp进行十六进制检测,结果为:63 1B B1 B2
显然,结果说明VB没有对Btemp数值进行更改.结果是正确的.而以下代码:
Dim Btemp(3) As Byte
Dim Strtemp As String
Btemp(0) = 99
Btemp(1) = 27
Btemp(2) = 177
Btemp(3) = 38
Strtemp = StrConv(Btemp, vbUnicode)测试出来的结果却是:63 1B 3F,如果VB没有做小动作,那么正确的结果是:63 1B B1 26
经过反复测试发现,如果大于129的字节后面,跟的不是同样大于129的字节的话,VB会对数值进行转换....
也就是说,打印机会接收到错误的代码,打印出错误的字符.请问该怎么做,才能让VB不要这么"多此一举"呢?
Strtemp = Btemp
不知道你如何调用打印机,应该直接按 Ansi 格式输出。
因为177高位为人,VB自动认为它是汉字,将"177"和后面的"38"合在了一处,而string里没这个汉字,所以会自动用"?"号代替掉.而"?"的ASCII代码正是"3F"..对于这个"自作聪明"的行为感到无奈..
在C++ 6.0的char(177)里,就算找不到对应的字符,但并不会用"?"号代替,而会原原本本地输出177这个字符,哪怕没这个字符..
因为被string局限了,所以,感觉string不能达到我要的,请问,VB有像C++中char那样的类型吗?
open "lpt1:" for output as #1
dim a as string
print #1,a
close这样调用向打印机输出..
是不是:strtemp=Btemp ?
这样也不行,就像上面说的,找不到对应字符,用"?"替换掉了,打印机收到的数据是:3F 3F
若在WINXP下应该使用Printer 对象来实施打印汉字.
见http://topic.csdn.net/u/20070929/18/6ddd8fc1-aac3-4cc7-9b08-4fd21c7ffecc.html我的答贴.
Dim Btemp(3) As Byte
Btemp(0) = 99
Btemp(1) = 27
Btemp(2) = 177
Btemp(3) = 38
Open "LPT1:" For Binary Access Write As #1
Put #1, , Btemp
Close
中间省略掉的参数怎么用?
而 Binary 模式是按内存字节读写的,不做转化。