2013-02-28 57 views
1

我在問我是否錯誤地使用了SerialPort.Write()。我敢肯定我沒有,但你永遠不知道...SerialPort.Write(byte [],int,int)的文檔是否有誤導性?

的文檔SerialPort.Write(byte[], int, int)狀態:

默認情況下,使用的SerialPort到ASCIIEncoding編碼字符。 ASCIIEncoding將大於127的所有字符編碼爲(char)63或 '?'。要支持該範圍內的其他字符,請將編碼設置爲 UTF8Encoding,UTF32Encoding或UnicodeEncoding。

這與SerialPort.Write(string)SerialPort.Write(char[], int, int)的文檔中的註釋完全相同。

多年來一直如此,但我從未真正注意過它。我一直很樂意使用SerialPort.Write(byte[], int, int)發送值高於0x7f的二進制數據。我感到奇怪的是,發送字節數組的東西的文檔正在談論字符。

這僅僅是我,還是在那裏的文檔有點不對?

+0

在我看來,備註應該只在這些方法的'char []'和'string'重載。 – CodeCaster 2013-02-28 09:31:00

+0

是的,我在想複製粘貼錯誤。但偶爾我會意識到自己多年來一直在做錯事,我靠運氣逃避了。 – 2013-02-28 09:33:09

+0

我同意CodeCaster,正如你所說的,它可能只是MS上的一個複製粘貼錯誤。 – dbasnett 2013-03-01 15:21:25

回答

2

是的,這是誤導。 (不知道你還能從答案中得到什麼,這真的是個問題嗎?)

+1

我擔心我可能錯誤地使用了SerialPort.Write(),而且這只是偶然的工作。 – 2013-02-28 09:31:11

3

這個文檔肯定是錯誤的。如果你反編譯Write(char[], int, int)你會看到

byte[] bytes = this.Encoding.GetBytes(buffer, offset, count); 
this.Write(bytes, 0, bytes.Length); // This is the Write(byte[], int, int) method 

儘管Write(byte[], int, int)方法只包含:

this.internalSerialStream.Write(buffer, offset, count, this.writeTimeout); 

所以,很顯然,沒有ASCII編碼在該方法中發生。

相關問題