我正在使用visual basic编写一个程序,并遇到了一个奇怪的问题。我正在通过串口发送字符串到望远镜支架。当我发送check
字符串时,作用域可以返回chr(0)或chr(255)。这在python和C++返回chr(255)中工作正常。但是,当我在Visual Basic中运行脚本时,它会返回chr(0)或chr(63)。VB.net将chr(255)返回为chr(63)
下面是两个相同的函数,一个用于python,一个用于visual basic。
任何人都可以给我一个想法,为什么视觉基本回报63而不是255?
函数在python(返回正确的值0和255):在视觉基本
global d, check
d=chr(80)+chr(4)+chr(16)+chr(2)+chr(1)+chr(112)+chr(252)+chr(0)
check=chr(80) + chr(1) + chr(16) + chr(19) + chr(0) + chr(0) + chr(0)+chr(1)
def test():
ser.write(d)
time.sleep(.1)
print ser.readline()
ser.write(check)
time.sleep(.1)
out=ser.readline()[0]
print "out=",ord(out)
while out == chr(0):
print "out = ", ord(out)
ser.write(check)
time.sleep(.1)
out=ser.readline()[0]
print "out=",ord(out)
print "out is now", ord(out)
ser.readline()
脚本(返回不正确的值0和63)
Public Sub test()
Dim out As Char
Dim d As String = Chr(80) + Chr(4) + Chr(16) + Chr(2) + Chr(1) + Chr(112) + Chr(252) + Chr(0)
Dim check As String = Chr(80) + Chr(1) + Chr(16) + Chr(19) + Chr(0) + Chr(0) + Chr(0) + Chr(1)
port.Write(d)
Threading.Thread.Sleep(100)
Console.Write(port.ReadTo("#"))
port.Write(check)
Threading.Thread.Sleep(100)
out = port.ReadTo("#")
Console.Write(vbNewLine & "out=" & out)
While out = Chr(0)
Console.Write("out = " & Convert.ToInt16(out))
port.Write(check)
Threading.Thread.Sleep(0.1)
out = port.ReadTo("#")
Console.Write("out=" & Convert.ToInt16(out))
End While
Console.Write("out is now" & Convert.ToInt16(out))
port.ReadLine()
End Sub
根据MSDN字符型保持无符号的16位(2字节)的代码点 – jeffpkamp