MFC 進製轉化器

2021-06-21 05:35:32 字數 2707 閱讀 7478

學習了一段時間的mfc,但是總是感覺學的比較零散,偶然發現乙個mfc寫的比較好的部落格,因此打算在他的基礎上來整體的學習mfc。

本文在原文的基礎上上新增了2進製到8進製的相互轉化,原文:

執行介面如下:

在實現這個功能前,建立乙個對話方塊的專案,自己命名,新增控制項,建立類嚮導。

在標頭檔案裡面新增函式,分別如下:

afx_msg void onbnclickedbutton1();

virtual bool pretranslatemessage(msg* pmsg);

void hexconverter();

cstring bintodec(cstring strbin);

cstring dectobin(cstring strdec);

cstring bintooct(cstring strbin);

cstring octtobin(cstring stroct);

此時,原始檔如下:

void chexconverterdlg::onbnclickedbutton1()

bool chexconverterdlg::pretranslatemessage(msg* pmsg)

else if (pmsg->wparam==vk_delete)

}return cdialogex::pretranslatemessage(pmsg);

}void chexconverterdlg::hexconverter()

else if (((cbutton *)getdlgitem(idc_16_to_10))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_10_to_2))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_2_to_10))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_2_to_16))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_16_to_2))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_2_to_8))->getcheck()==bst_checked)

else if (((cbutton *)getdlgitem(idc_8_to_2))->getcheck()==bst_checked) }

cstring chexconverterdlg::bintodec(cstring strbin)

return stroct;

}cstring chexconverterdlg::octtobin(cstring stroct)

{ cstring strbin="";

cstring strtemp,strtemp1;

for (int i=0;i

1、pretranslatemessage(msg* pmsg)  是對鍵盤部分按鍵的重寫,主要是實現enter和backspace的功能實現,都通過hidecaret()來隱藏插入符,getdlgitem()是獲取編輯框控制項的控制代碼;

2、hexconverter()是這個**的核心,通過判斷是哪個單選控制項按下來決定操作,在這兒,單選按鈕或者核取方塊都是通過這種方法來判斷是否選中,此時getcheck()的返回值有三種,分別為bst_checked,bst_unchecked和bst_indeterminate,以此表示為選中,未選中,變灰不可操作,在相應的單選按鈕選中後執行對應的操作

3、_atoi64(const char *str)這個函式式吧字串轉化為整數,在這兒返回值是__int64

4、strdes.format("%x",num); 這句話是把__int64的整數轉化為十六進製制的數,並且格式化儲存,在這兒%x表示十六進製制

5、setdlgitemtext(idc_edit,strdes),是把指定的數值顯示在控制項上面,在這兒是顯示在編輯框

6、strtoul(const char *str,char **endptr,int radix)這個函式式吧cstring轉化為無符長整數,在這個函式的三個引數中,str表示要轉化的字元,endptr一般設為null,radix是要轉化的進製,在這兒是用的strtoul(strnum,null,16)就是把strnum轉化為16進製制

8、關於二進位制轉化十進位制,為啥可說的,直接按照定義來求就行了,但是注意的是二進位制字元的低位在最後面,所以你的判斷過程是從後面開始的。

9、關於十進位制轉化2進製,那麼就是模2取餘,在這兒沒有考慮小數的情況,對於%2的餘數從下到上就是轉化的二進位制**

10、關於二進位制轉8進製,就是從低位到高位每三位一組一次來求解,這兒就得考慮二進位制串的位數,通過format函式就可以在高位補0,最後對於三位的處理就看你自己的方法,在這兒我的方法就是通過sscanf函式來獲取三位二進位制串,這兒mid函式的可以獲取任意起始位置的k長度的字串,再就是只要一次處理就行。

11、8進製轉2進製的方法和上面差不多

12、2進製和16進製制的相互轉化,通過10進製來做中間過程。

進製轉化器。

能夠進行二,八,十,十六進製制之間的轉化。include include void turn1 printf 轉化為二進位制為 while i 0 printf d b i printf n void turn2 printf 轉化為八進位制為 while i 0 printf d b i prin...

進製轉化相關

輸入為一行,m 32位整數 n 2 n 16 以空格隔開。為每個測試例項輸出轉換後的數,每個輸出佔一行。如果n大於9,則對應的數字規則參考16進製制 比如,10用a表示,等等 輸入7 2 輸出 include using namespace std int main while m s table ...

c 進製轉化

轉換為十進位制 convert.toint32 值字串 字串的進製 十進位制轉為其他進製 convert.tostring 十進位制值,要轉換的進製 using system using system.linq using system.net.security 十進位制整數轉換為其他進製 stat...