VS C 開發問題總結

2021-09-29 05:47:14 字數 1222 閱讀 9289

1、新建的mfc 對話方塊cstring和char*的轉換一直失敗(vs工程預設配置)

在網上看了很多cstring轉char*的方法,但是轉換一直失敗,例如以下幾種方式

cstring m_ipaddr = "192.168.1.100";

char* ipaddr = (lpstr)(lpctstr)m_ipaddr;

//或者

strcpy(char *,cstring);

以上兩種編譯都是沒有問題,但是傳參總是只傳第乙個字元即「1」,頭大的很,後面才發現原來是編碼格式選擇問題。

因為預設新建的vs工程預設工程使用的字符集是「使用unicode字符集」,選擇多字符集就搞定了。

自己理解:mfc中ctring,預設採用unicode編碼,而char採用ansi編碼,兩種編碼中單個字元佔的儲存大小也是不同的,cstring屬於所謂的寬字符集,佔乙個字元佔兩個位元組;char型別屬於窄字符集,乙個char字元佔乙個位元組,所以它們之間的轉換涉及到位元組大小的轉換。

對於ansi編碼而言,0x00~0x7f之間的字元,依舊是1個位元組代表1個字元。這一點是ansi編碼與unicode編碼之間最大也最明顯的區別。為使計算機支援更多語言,通常使用 0x80~0xff 範圍的多個位元組來表示 1 個字元。

unicode是電腦科學領域裡的一項業界標準,包括字符集、編碼方案等。unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一並且唯一的二進位制編碼,以滿足跨語言、跨平台進行文字轉換、處理的要求。

當然如果堅持用unicode編碼也可以用如下方法實現cstring和char*的轉換:

//實現unicode編碼格式下的cstring和char*的轉換

//#include cstring m_ipaddr= _t("192.168.1.100");

uses_conversion;

char* ipaddr = t2a(m_ipaddr);

順便一提:「_t」的含義:_t是乙個巨集,作用是讓你的程式支援unicode編碼。因為windows使用兩種字符集ansi和unicode,前者就是通常使用的單位元組方式,但這種方式處理像中文這樣的雙位元組字元不方便,容易出現半個漢字的情況。而後者是雙位元組方式,方便處理雙位元組字元。

產品開發問題總結

公司和軟體系統開發分成兩部分,一部分叫產品,另一部分叫開發 他們之間的矛盾是這樣的,開發總是認為產品,文件或者產品的定義不清楚而,產品認為開發總是找事,或者說肯定是一次性不說不清楚的,所以文件有問題是理所當然的。大家都沒有錯。所有人讓開發也參加產品的討論會。希望這樣可以解決問題,這樣能解決問題嗎?首...

thrift開發問題總結

作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在實現的thrift系統中,遇到的各種問題。但是thrift在隱藏一些底層細節的同時,也給應用層帶來了一些不確定性,這些不確定...

H5開發問題總結

local 和session 都無法直接訪問物件,當你定義乙個 json 以後 通過setitem 和getiem 後發現無法正常使用,應為local session 都是支援字串的訪問,所以這是需要兩個步驟第一就是在存的時候吧json 轉化成字串,當取出的時候再把字串解析成json 例如 var ...