通過一些通訊方式傳輸的資料(比如:串列埠傳輸),有時候會儲存為char型別的資料資料,我們需要把char陣列中的所有資料轉化為int整數,方法一是直接通過移位運算來實現:
char c[4] = ;
char t;
int num = 0;
int len = sizeof(c) / 2;
char d[sizeof(c) / 2];
for (int i = 0, j = 0; j < sizeof(c); i++, j += 2)
d[i] = (c[j] << 4) | c[j + 1];
for (int i = 0, j = len - 1; i < len / 2; i++, j--)
t = d[i], d[i] = d[j], d[j] = t;
strncpy((char*)& num, d, len);
cout << num << endl;
結果直接儲存在整數int中
使用這種方法最好確認一下:
char陣列中儲存的值在記憶體中為數值的十六進製制方式顯示,而不是ascii碼方式顯示,
可以看到char nn陣列中儲存為3fff,在記憶體中的現實方式為十六進製制數字方式顯示,才能計算出正確的num結果。
如果在函式呼叫中,傳遞的引數為ascii碼顯示,就是用直接對應的關係組成相對應的實際數字。
可以看到用區域性引數char c陣列去接受dac_buffer傳遞進來的3fff引數,儲存在記憶體中為ascii碼顯示,運算的為實際十進位制數的**為:
u32 dac_total= 0;
u32 dac_0 =(u32)dac_buffer[0] ;
u32 dac_1 =(u32)dac_buffer[1] ;
u32 dac_2 =(u32)dac_buffer[2] ;
u32 dac_3 =(u32)dac_buffer[3] ;
switch(dac_0)
switch(dac_1)
switch(dac_2)
switch(dac_3)
我這裡是對3fff進行還原為實際對應的十進位制數,dac_total儲存結果。
用xilinx sdk進行引數傳遞會把接受到的引數用ascii碼表示,常規理解應該用十六進製制來表示(在visual studio中就是這樣),但是不知道為什麼在這個ied中會使用ascii碼來儲存
十進位制整數轉化R進製整數
棧結構的邏輯結構為線性的,可建立鏈式結構使得入棧 出棧的操作是動態的,也可以很好地實現進製的轉換。而且進製轉換恰好和棧的輸入輸出輸出類似,故選擇棧是最好的。功能 該函式實現建立初始化的棧。具體過程 1.建立乙個棧結構體指標s 2.將s指標指向的s top賦予 1,即定義棧頂初始為空。功能 該函式實現...
棧 十進位制轉化為任意制
include include define stack init size 100 define size increment 5 typedef struct 棧結構 sqstack,sqstack int stackinit sqstack s 初始化棧 int push sqstack s,...
十進位制轉化為二進位制
今天我們來實現乙個有趣的小案例。要求 任意輸入乙個正十進位制數把它轉化為二進位制數輸出。我這裡使用了遞迴演算法 def transit num,binary 十進位制轉化為二進位制 param num 輸入的10進製 return none if num 2 remainder num 2 num ...