2013-03-06 71 views
2

我有被写入的C/CLIC++/CLI从字符串转换^到阵列<Byte>

串行端口应用程序读取来自端口的数据输入缓冲器我使用

String^ inputString = System::IO:Ports::SerialPort::ReadExisting(); 

我需要将inputString值转换为一个字节数组。我一直在使用

array<Byte> ^unicodeBytes = System::Text::Encoding::Unicode->GetBytes(inputString); 

这工作,只要在我的端口输入缓冲区中读取的值小于0x7F的(十六进制)尝试。大于0x7F的任何值都将转换为0x3F =“?”

E.g.如果我发送包括{0x7F, 0xFF}两个字节来我输入口,然后,当我读到,并将其转换阵列unicodeBytes = { 0x7F 0x00, 0x3F 0x00}当在VS2008

的调试器监视窗口看着据我已经看过OXFF的Unicode表是一个有效的Unicode值等于一个拉丁字母'y',上面有两个小圆点。

任何有关如何将字符串格式中的两个samll点= 0xFF转换为'y'的建议,我们将不胜感激。

+1

你想如果使用'ASCII'(或其他代码页)编码,而不是'Unicode' :) – leppie 2013-03-06 16:08:11

+1

您目标是读取字节(二进制数据),然后不要使用读取字符串的API。尝试使用取得字节数组的Read方法。 http://msdn.microsoft.com/en-us/library/ms143549.aspx – 2013-03-06 18:30:04

+0

感谢这两个建议。读取二进制数据正是我想要做的,所以我已经部署了Read方法,现在它的所有工作。谢谢你的提示。 – user2140597 2013-03-07 08:42:51

回答

0

使用SerialPortRead方法获取字节而不是对编码的文字:

int BufferSize = <some size>; 
array<byte> ^bytes = gcnew array<byte>(BufferSize); 
int available = serialPort->BytesAvailable; 
serialPort->Read(bytes, 0, Math::Min(available, BufferSize));