我正在尝试通过串口向打印机发送“getvar”命令,并接收响应,但是我在尝试验证我发送的内容时收到的是什么,收到的是:“系统.BYTE []“
这是我的代码:
const string quote = "\"";
. . .
string getDeviceLang = string.Format("! U1 getvar {0}device.languages{0}", quote);
. . .
String deviceLanguage = PrintUtils.GetSettingFromPrinter(getDeviceLang);
. . .
MessageBox.Show(deviceLanguage); // <= this shows "System.Byte[]"
public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
try
{
BasicPortSettings bps = new BasicPortSettings();
bps.BaudRate = BaudRates.CBR_19200;
bps.Parity = OpenNETCF.IO.Serial.Parity.none;
bps.StopBits = OpenNETCF.IO.Serial.StopBits.one;
Port serialPort = new Port("COM1:", bps);
serialPort.Open();
byte[] outputBytes = Encoding.ASCII.GetBytes(cmd);
MessageBox.Show(Convert.ToString(outputBytes)); // <= this shows "System.Byte[]"
serialPort.Output = outputBytes;
byte[] inputBytes = serialPort.Input;
setting = Convert.ToString(inputBytes);
serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
}
我需要做什么才能真正看到我正在传递和接收的字符串,而不仅仅是数据类型的字符串表示?
看起来是否合适:
setting = System.Text.Encoding.ASCII.GetString(
inputBytes, 0, inputBytes.Length);
?它至少可以编译,但是......
好的,这段代码:
public static string GetSettingFromPrinter(string cmd)
{
string setting = string.Empty;
try
{
BasicPortSettings bps = new BasicPortSettings();
bps.BaudRate = BaudRates.CBR_19200;
bps.Parity = OpenNETCF.IO.Serial.Parity.none;
bps.StopBits = OpenNETCF.IO.Serial.StopBits.one;
Port serialPort = new Port("COM1:", bps);
serialPort.Open();
byte[] sendBytes = Encoding.ASCII.GetBytes(cmd);
MessageBox.Show(Encoding.ASCII.GetString(sendBytes, 0,
sendBytes.Length));
serialPort.Output = sendBytes;
byte[] receiveBytes = serialPort.Input;
setting = GetString(receiveBytes);
serialPort.Close();
return setting;
}
catch (Exception x)
{
MessageBox.Show(x.ToString());
return setting;
}
}
...确实在这里返回了预期的val(!U1 getvar“device.language”):
MessageBox.Show(Encoding.ASCII.GetString(sendBytes, 0, sendBytes.Length));
...但这里仍然是一个空字符串:
String deviceLanguage = PrintUtils.GetSettingFromPrinter(getDeviceLang);
MessageBox.Show(deviceLanguage);
// Helper function, from http://stackoverflow.com/questions/472906/converting-a-string-to-byte-array
static string GetString(byte[] bytes)
{
char[] chars = new char[bytes.Length / 2];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
return new string(chars);
}
也许“sendBytes”根本就没有被发送,这就是为什么在receiveBytes中没有响应/什么......
答案 0 :(得分:2)
如果您想以十六进制形式查看字节,请使用BitConverter.ToString(byte[])
。这将为您提供输出,例如&#34; 01-56-AF&#34;。
如果您想要文字 - 嗯,您已经将其作为cmd
- 但一般情况下,要将byte[]
转换为其代表的文字,请使用{{1}使用合适的编码。
从根本上说,没有&#34;实际字符串值&#34;对于一个字节数组 - 有许多将任意字节数组转换为文本的不同方法,你需要为你的上下文选择正确的方法。
答案 1 :(得分:1)
更改
setting = Convert.ToString(inputBytes);
到
setting = System.Text.Encoding.ASCII.GetString(inputBytes);