C++基礎——bitset與string的相互轉化
bitset類模板提供了非常直接的介面進行與string型別資料的轉換。然而一些需要注意的細節又是非常繁瑣。具體如何繁瑣,且看下文分解。
在閱讀本文之前,你需要知道bitset模板類實現的基礎,即非型別模板引數技術。
bitset<>類模板的非型別引數的例項化,構造時可以接受一個string型別,且bitset<>::to_string
成員函式可以實現向string
型的轉換。但需注意的一點是,string
為引數的構造以及to_string
都是成員模板,因為庫類std::basic_string
本身也是一個模板,一般的string類形式,std::string
basic_string<char>
的別稱:
typedef basic_string<char, char_traits<char>, allocator<char> >
string;
因為string型別引數的構造以及to_string
都是以成員模板的形式定義的,所以(新的c++標準放寬了這些條件,但為了嚴格,以及閱讀稍早期一點程式碼的方便,還是整理出來):
// 推擠寫法
std::bitset<6>(std::string("110101"));
// 而不是
std::bitset<6>("110101");
第二種版本可能會發生編譯錯誤在一些老式的編譯器上,因為編譯器不知道如何進行例項化。同樣地,因為成員模板函式的特性,不可以直接這樣寫:
string s = b.to_string();
你必須寫成這樣一個醜八怪:
string s =
b.template to_string<char, char_traits<char>,
allocator<char> >();
b.template
的存在是為了告訴編譯器,其後的第一個<
不是小於號,而是模板引數列表的格式。
實踐中為了程式碼的可閱讀性,可構造如下的輔助函式:
- 針對string型別引數的構造
template<size_t N>
bitset<N> from_string(const string& s)
{
return bitset<N>(s);
}
這時客戶端程式:
bitset<6> b = from_string<6>("110101");
這裡隱式地存在一個const string& s = "110101";
的轉換。
- 針對
b.to_string
這一模板成員變數:
我們可以繼續封裝:
template<size_t N>
std::string to_string(const std::bitset<N>& b)
{
return b.template
to_string<char, char_traits<char>, allocator<char> >();
}
相關推薦
C++基礎——bitset與string的相互轉化
bitset類模板提供了非常直接的介面進行與string型別資料的轉換。然而一些需要注意的細節又是非常繁瑣。具體如何繁瑣,且看下文分解。 在閱讀本文之前,你需要知道bitset模板類實現的基礎,即非型別模板引數技術。 bitset<&
C++:int 與string相互轉換
1、string轉int的方式 採用最原始的string, 然後按照十進位制的特點進行算術運算得到int,但是這種方式太麻煩,這裡不介紹了。 採用標準庫中atoi函式。 string s = "12"; int a = atoi(s.c_str());
json與string相互轉化
1. 在js和小程式中都將json格式轉化為物件: var string = '{"name":"frank", "age":29, "birthday":"1978-1-1"}';var obj=
char[]與string相互轉化
1、char[] 轉化 string char buffer[20]="hello!"; string str(buffer); cout<<str; 2、 string 轉化char[] string str="hello!"; char buffer[20]
BSTR與string相互轉化
BSTR實際上就是一個COM字串,標準BSTR是一個有長度字首和null結束符的OLECHAR陣列。BSTR的前4位元組是一個表示字串長度的字首。BSTR長度域的值是字串的位元組數,並且不包括0結束符 #include <comutil.h> #include 
CString與string相互轉化
string轉CString std::string s="lskdjflkdjf"; CString str=s.c_str(); CString轉string USES_CONVERSION; CString temp; temp=_T("kjdsaflkjdlfkj"); char* s_
python筆記——json與string相互轉化
我在從web獲取到json資料時,需要儲存在本地文字檔案中,這就需要json轉換為string,使用快取資料時,又需要string轉json。 注意,如果要存入文字文件,一定先將dict轉為string,string裡面key要使用雙引號,要不然存在文字文件裡
c++ 中 char 與 string 之間的相互轉換
第一部分: 將 char * 或者 char [] 轉換為 string 可以直接賦值,轉換。 第二部分: 將 &n
gson class[] 與 Json String 相互轉化通用化
1.目的: 主要通過gson實現class 陣列與json 轉化的通用化的工具。不會因為類不同改變工具的類。 2.原始碼 工具類: package Util; import java.util.ArrayList; import com.google.gson
【C++】C++中int與string的相互轉換
一、int轉string 1.c++11標準增加了全域性函式std::to_string: string to_string (int val); string to_string (long val); string to_string (long long val); string to_str
c++ 中 char 與 string 之間的相互轉換問題
第一部分: 將 char * 或者 char [] 轉換為 string 可以直接賦值,轉換。 第二部分: 將 &n
Java string與int相互轉化
String 轉 int public class Main { public static void main(String []args) { //需注意的是,若是出現轉換中存在非數字字元,可能
【Java】Date與字串String 相互轉化的方法
Date -> String 理解Date類和Date轉 String的方法 可以參考我寫的另一篇文章 – Java用Date類獲取當前時間戳、時間戳的格式轉換方法,就不在多贅述了 String -> Date 方法與Date轉String非常的類似,需要用
C++ 整數與字串相互轉化
一. 整數轉化為字串 方法1:用itoa(實戰時常用) #include <iostream> #include <stdlib.h> using namespace st
C++數值型別與string的相互轉換
1.數值型別轉換為string 1.1使用函式模板+ostringstream 使用函式模板將基本資料型別(整型、字元型、實型、布林型)轉換成string。 //ostringstream物件用來進行格式化的輸出,常用於將各種型別轉換為string
C++中int與string的相互轉換
一、int轉string 1.c++11標準增加了全域性函式std::to_string: string to_string (int val); string to_string (long val); string to_string (long long val);
C#中ArrayList 與 string、string[]數組 的轉換
list string ray AR nbsp 數組 arr spl oar 1、ArrarList 轉換為 string[] : ArrayList list = new ArrayList(); list.Add("aaa"); list
C語言字串與數字相互轉換
在C/C++語言中沒有專門的字串變數,通常用字元陣列來存放字串。字串是以“\0”作為結束符。C/C++提供了豐富的字串處理函式,下面列出了幾個最常用的函式。 ● 字串輸出函式puts。 ● 字串輸出函式gets。 ●
java型別 7bit位元組與String 相互轉換
在通訊GSM,俗稱的2G 通常採用的是7bit編碼,是一種7位編碼壓縮演算法,其實原理上來說一個位元組佔8個位元位,一般最高位都是符號運算位 ,通常忽略不計,7bit其實就是運用了最高位將位元組往前移一位 就能空出一個位元位來給下個位元組用,也就是說8個位元組 之前的話 64位位元位來表
C#實體類與XML相互轉換
1、實體類與XML相互轉換 將實體類轉換成XML需要使用XmlSerializer類的Serialize方法,將實體類序列化。 把XML轉換成相應的實體類,需要使用到XmlSerializer類的Deserialize方法,將XML進行反序列化。 建立XML序列化公共處理類(XmlS