1、統(tǒng)一用unsigned char不容易出錯。另外在VS里面,有個定義:
//在WINDEF.H中被定義
typedef unsigned char BYTE;
因此上位機有的人用BYTE類型來收發(fā)數(shù)據(jù)也行
2、我看有同事用char類型接收,語法上來說char默認是signed char
我只能說強制類型轉換過程是有可能修改內(nèi)存數(shù)據(jù)的,雖然實測unsigned char轉為signed char不會修改內(nèi)存數(shù)據(jù),只是變量解析方式變了,但是這個習慣不好,比如unsigned char轉float就會修改內(nèi)存數(shù)據(jù),當然如果用修改指針類型方式則不會修改內(nèi)存數(shù)據(jù)(修改指針類型方式的方式其實是在做內(nèi)存拷貝)。以下為驗證代碼:
unsigned char rev_buffer[8] = { 0 };
memset(rev_buffer,0,8);
rev_buffer[0] = 0xfe;
printf("%2x\\r\\n", rev_buffer[0]);
signed char sc_rev_buffer_temp[8];
//直接拷貝內(nèi)存數(shù)據(jù)。打印signed char類型會出來4個字節(jié)是printf函數(shù)里面做的
memcpy(sc_rev_buffer_temp, rev_buffer, 8);
printf("%x ", sc_rev_buffer_temp[0]);
printf("%d\\r\\n", sc_rev_buffer_temp[0]);
//unsigned char強制轉換為signed char類型
sc_rev_buffer_temp[0] = (signed char)rev_buffer[0];
printf("%x ", sc_rev_buffer_temp[0]);
printf("%d\\r\\n", sc_rev_buffer_temp[0]);
float f_rev_buffer_temp;
unsigned char uf_rev_buffer_temp[8];//輔助打印
//直接拷貝內(nèi)存數(shù)據(jù)
memcpy(&f_rev_buffer_temp, rev_buffer, 8);
memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp,8);
printf("%x ", uf_rev_buffer_temp[0]);
printf("%d\\r\\n", uf_rev_buffer_temp[0]);
//用指針操作類型,不會修改內(nèi)存數(shù)據(jù)
f_rev_buffer_temp = *(float*)(&rev_buffer[0]);
memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp, 8);
printf("%x ", uf_rev_buffer_temp[0]);
printf("%d\\r\\n", uf_rev_buffer_temp[0]);
//用類型強制轉換,會修改內(nèi)存數(shù)據(jù)
f_rev_buffer_temp = (float)(*(long long*)(&rev_buffer[0]));
memcpy(uf_rev_buffer_temp, &f_rev_buffer_temp, 8);
printf("%x ", uf_rev_buffer_temp[0]);
printf("%d\\r\\n", uf_rev_buffer_temp[0]);
getchar();
3、如果收發(fā)過程是從buffer里面memcpy拷貝數(shù)據(jù)的話(用memcpy而不是直接等于),并且后續(xù)使用也是按字節(jié)拷貝的話,那就無所謂容器的數(shù)據(jù)類型問題。因為按字節(jié)拷貝的話,容器只提供一個首地址,不會改變內(nèi)存數(shù)據(jù)
總結規(guī)范:收發(fā)數(shù)據(jù)統(tǒng)一用unsigned char類型
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
上位機
+關注
關注
27文章
1002瀏覽量
57048 -
char
+關注
關注
0文章
11瀏覽量
3923 -
memcpy
+關注
關注
0文章
9瀏覽量
3024
發(fā)布評論請先 登錄
相關推薦
熱點推薦
想實現(xiàn)unsigned char和double的轉換,為什么DSP仿真一直不對?
請教數(shù)據(jù)類型轉換問題,處理器類型:ADSP21479,編譯器visual DSP 5.0。
想實現(xiàn)unsigned char和double的轉換(因為從外部接口接收到的是
發(fā)表于 01-11 08:29
統(tǒng)一用戶管理在校務管理系統(tǒng)中的實施
和安全性。_ll為此中山大學在建設新一代校務管理系統(tǒng)的過程中。提出了“五個統(tǒng)一”:統(tǒng)一數(shù)據(jù)庫。統(tǒng)一標準、統(tǒng)一開發(fā)平臺、
發(fā)表于 10-10 15:22
unsigned char code seg[] 什么意思?
unsigned char code seg[]nusigned 是無字符char是數(shù)據(jù)類型seg 是變量名code 是什么意思??我不明白unsi
發(fā)表于 04-13 12:57
unsigned char型數(shù)據(jù)加上48卻得到了42!
如題!今天做單片機串口傳送,結果定義的一個unsigned char型數(shù)據(jù)加上48!然后從串口發(fā)到電腦就變成了42!這是為什么?。?/div>
發(fā)表于 04-04 15:22
統(tǒng)一通信平臺和傳真的聯(lián)合增值
時間、任何地點,都可以通過任何設備、任何網(wǎng)絡,獲得數(shù)據(jù)、圖像和聲音的自由通信。也就是說,統(tǒng)一通信系統(tǒng)將語音、傳真、電子郵件、移動短消息、多媒體和數(shù)據(jù)等所有信息
發(fā)表于 01-13 13:09
將unsigned char類型的數(shù)據(jù)存入unsigned char code dis1[]中,求各位指點
# include # include typedef unsigned char BYTE;BYTE n=8;BYTE code dis1 []=n;想達到直接寫B(tài)YTE code dis1
發(fā)表于 07-22 10:43
如何用串口傳輸float類型數(shù)據(jù)
提取時,要把數(shù)據(jù)從16進制轉到10進制,float 轉 unsigned char :在發(fā)送數(shù)據(jù)時,要把數(shù)據(jù)從10進制轉到16進制,再通過u
發(fā)表于 01-19 06:12
51單片機的unsigned char code代碼定義詳細說明
本文檔的主要內(nèi)容詳細介紹的是51單片機的unsigned char code代碼定義詳細說明。
發(fā)表于 07-11 17:40
?6次下載
char 與unsigned char在嵌入式開發(fā)中的區(qū)別
嵌入式中數(shù)據(jù)采集的最小單位為8bit或者8bit的倍數(shù),在嵌入式中char buf[ ]指的就是字符串,也就是所謂的字符空間,轉換成ascii碼是有符號數(shù)unsigned char b
發(fā)表于 11-03 10:06
?9次下載
Char數(shù)組與String是如何從統(tǒng)一走向分離的?
在很多編程語言中,經(jīng)常用 String 類型來表示字符串,用 Char 來表示字符類型;
發(fā)表于 05-19 09:49
?1626次閱讀
SystemC中的數(shù)據(jù)類型概念
語言的擴展,SystemC支持所有C++的數(shù)據(jù)類型,包括long、int、short、char、unsigned long、unsigned int、
oracle中to_char用法
to_char是Oracle數(shù)據(jù)庫中的一個函數(shù),用于將不同類型的數(shù)據(jù)轉換為字符類型。 to_
收發(fā)通信數(shù)據(jù)時應統(tǒng)一用unsigned char類型
評論