c程式設計,通過向串列埠發資料的方式傳送中文簡訊時,但中文顯示亂碼,如何軟體解碼

2022-07-15 10:42:21 字數 3400 閱讀 2779

1樓:福狸比艾斯迪

編碼問題吧,是不是那個裝置只支援ascii

2樓:匿名使用者

你可以上網查一下at命令集和短訊息的pdu編碼。其實很簡單的,基本實現起來就是向序列口傳送at指令所形成的字串。這樣做還需要對短訊息本身進行pdu編碼,至於解碼可以看看不用深入,手機自己會解碼。

3樓:匿名使用者

7710只能收發英文和數字,另外一款7210則可以收發中文簡訊

c#編寫的串列埠上位機,顯示中文偶爾亂碼,求解決。

4樓:匿名使用者

你可以先按十六進位制顯示,然後對比你收到的十六進位制與你輸入內容的十六進位制之間的差異。

一般來說這種現象出現的原因是你上下位機沒有規定好通訊協議,而是直接將收到的任何內容直接進行轉碼顯示,因為串列埠本身有緩衝區,你下位機一次發出來的內容,在上位機可能兩次才能接收到,如果中斷的地方剛好是中文,自然就出來半個字元那就是亂碼了。

你好,我問一下c#程式設計怎樣讀入bin檔案並通過串列埠以位元組方式傳送出去

5樓:匿名使用者

讀檔案用streamreader

串列埠通訊用serialport

c#串列埠程式點選按鈕傳送資料可以接收亂碼無法正常顯示

6樓:陽光的雷咩咩

多半是編碼問題,專案打包壓縮發來看

7樓:匿名使用者

傳送是utf-8編碼的,接收用ascll,不能正常解析吧

c#串列埠傳送資料

8樓:匿名使用者

新增引用:microsoft.visualbasic(是c#**,只是需要引用下。。)

用以下遍歷serialportnames,獲得所有的串列埠

microsoft.visualbasic.devices.

computer pc = new microsoft.visualbasic.devices.

computer();

foreach (string s in pc.ports.serialportnames)

然後對應顯示的串列埠名稱comname,獲取操作物件。就可以對這個串列埠進行開啟了:

system.io.ports.serialport com = new system.io.ports.serialport(comname);

com.open();

然後可以對串列埠寫資料

向串列埠傳送資料:

com.writeline(this.textbox1.text);

也可以寫byte陣列

com.write(barray,0,5);//是指寫byte陣列barray的,從0開始的5個byte

也可以接受資料:

com.readline()

也可以讀byte

com.readbyte();

最後就是關閉了:

com.close();

另外將16進位制string轉byte

byte b = convert.tobyte("1a",16);

9樓:8269男

這涉及點進位制轉換,希望下面的**對你有幫助..

//十進位制轉二進位制

console.writeline("十進位制166的二進位制表示: "+convert.tostring(166, 2));

//十進位制轉八進位制

console.writeline("十進位制166的八進位制表示: "+convert.tostring(166, 8));

//十進位制轉十六進位制

console.writeline("十進位制166的十六進位制表示: "+convert.tostring(166, 16));

//二進位制轉十進位制

console.writeline("二進位制 111101 的十進位制表示: "+convert.toint32("111101", 2));

//八進位制轉十進位制

console.writeline("八進位制 44 的十進位制表示: "+convert.toint32("44", 8));

//十六進位制轉十進位制

console.writeline("十六進位制 cc的十進位制表示: "+convert.toint32("cc", 16));

我用c#寫了一個串列埠通訊的程式,接收字母很正常,但是一旦傳送漢字,接收到的就是亂碼

10樓:匿名使用者

用16進位制方式嘛.漢字佔用是4 byte,字母是2byte,

建議直接用unicode方式編碼..

11樓:匿名使用者

serialport.encoding = system.text.

encoding.unicode;//傳輸unicode字元,encoding屬性設定為unicode,保證電腦與電腦之間資料的正確傳送與接收.

//serialport.encoding = system.text.

encoding.ascii;//如與外部裝置通訊時,必須把編碼方式從unicode改回到預設的ascii方式,保證裝置資料的正確傳送與接收.

最好有一個通訊的協議,不然接收轉成字串也有可能是亂碼

c#向串列埠傳送指令不穩定 100

12樓:日落之月

如果上位機和下位機的程式沒有bug,一般通訊出問題都是由於兩次通訊間隔太短造成的,這樣的情況一般都是這個原因,通訊失敗不是本句造成的,和前後的**有很大關係,以下幾點建議:

1、單步除錯程式,如果通訊不會失敗,那就要調整**,降低通訊的頻率;

2、修改通訊協議,在下位機增加響應位,pc每發一次指令後等待響應,這樣可以完全避免軟體造成的通訊失敗;pc端程式還可以增加延時判斷,這樣子串列埠通訊的**會非常強壯。

另外要注意的,不可按照理想的波特率計算通訊指令傳送的頻率,顯示和理論還是有很大差異的;高的波特率會產生噪音,長距離通訊會有問題。

解決的辦法是 連續傳送

sp.writeline("stop");

sp.writeline("stop");

sp.writeline("stop");

sp.writeline("stop");

延時 一般最好的效果是在700~1200毫秒,

13樓:陌上的那顆新桑

你的分析不錯。

串列埠本來的速度都不是很快。

而且,不同的裝置有一定的響應速度。。。。

具體要看你裝置是什麼東西,還要看你的介面是什麼標準的。

14樓:旁笑槐

是不是太快了,加個延時試試

C中怎麼向串列埠傳送資料

忘了看你還要把接收的轉回10進位制。接收的如果是按位元組接收 readbyte 那麼接收回來的數直接就可以用10進製表示,如果需要顯示,可以直接在變數之後加.tostring 不明白可直接加我hi 之前的回答 byte t new byte 2 t 0 0xaa t 1 0xbb 串列埠物件.wri...

C串列埠資料讀取,cc2431通過串列埠將資料包傳送給pc,我希望通過c編寫串列埠通訊程式讀取傳送過來的資料

你好!你的這個程式,首先,要分析出cc2431串列埠傳送的內容 cc2431 傳送的是16進位制,微控制器的程式是你自己寫的嗎 由於我電腦主機板沒有com口,無法測試,但是,這種com口的操作,就如你說的,使用serialport類來實現。serialport port new serialport...

c語言微控制器程式設計中,怎樣將串列埠的到得字串賦值給陣列

1 串列埠字bai節為 dusbuf 暫存陣列 a 依次將接收到zhi的位元組存入a 0 a 1 a 2 a n 接收完畢,存入字元 dao串結束標回識 a n 1 0 a就代表一答個字串。如果是一串數字,要轉為整數。2 例程 include define uchar unsigned charuc...