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不要这么"多此一举"呢?

解决方案 »

  1.   

    不要调用转换函数,
    Strtemp = Btemp
    不知道你如何调用打印机,应该直接按 Ansi 格式输出。
      

  2.   

    我明白为什么Btemp=177时,对应的字符是"3F"了.
    因为177高位为人,VB自动认为它是汉字,将"177"和后面的"38"合在了一处,而string里没这个汉字,所以会自动用"?"号代替掉.而"?"的ASCII代码正是"3F"..对于这个"自作聪明"的行为感到无奈..
    在C++ 6.0的char(177)里,就算找不到对应的字符,但并不会用"?"号代替,而会原原本本地输出177这个字符,哪怕没这个字符..
    因为被string局限了,所以,感觉string不能达到我要的,请问,VB有像C++中char那样的类型吗?
      

  3.   


    open "lpt1:" for output as #1
    dim a as string
    print #1,a
    close这样调用向打印机输出..
      

  4.   

    VB codeStrtemp = Btemp 是什么来着??
    是不是:strtemp=Btemp ?
    这样也不行,就像上面说的,找不到对应字符,用"?"替换掉了,打印机收到的数据是:3F 3F
      

  5.   

    Btemp 不是字符,比如Btemp=12,也就是数值,打印机按数据十六进制代码接收: 31(1) 32(2)
      

  6.   

    LZ:用OPEN语句打开打印机方式,在WIN9X下支持汉字打印,在WINXP下不支持汉字.
    若在WINXP下应该使用Printer 对象来实施打印汉字.
    http://topic.csdn.net/u/20070929/18/6ddd8fc1-aac3-4cc7-9b08-4fd21c7ffecc.html我的答贴.
      

  7.   

    文件模式改用二进制方式试试
    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
      

  8.   

    put #1,,Btemp
    中间省略掉的参数怎么用?
      

  9.   

    文件模式中 Input/Output 是有格式的文本文件,写入时会进行格式化,Byte 数组转成可显示的字符串。
    而 Binary 模式是按内存字节读写的,不做转化。