2013-03-06 72 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));