1. 程式人生 > >C++基礎——bitset與string的相互轉化

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++基礎——bitsetstring相互轉化

bitset類模板提供了非常直接的介面進行與string型別資料的轉換。然而一些需要注意的細節又是非常繁瑣。具體如何繁瑣,且看下文分解。 在閱讀本文之前,你需要知道bitset模板類實現的基礎,即非型別模板引數技術。 bitset<&

C++:int string相互轉換

1、string轉int的方式 採用最原始的string, 然後按照十進位制的特點進行算術運算得到int,但是這種方式太麻煩,這裡不介紹了。 採用標準庫中atoi函式。 string s = "12";  int a = atoi(s.c_str());

jsonstring相互轉化

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]

BSTRstring相互轉化

BSTR實際上就是一個COM字串,標準BSTR是一個有長度字首和null結束符的OLECHAR陣列。BSTR的前4位元組是一個表示字串長度的字首。BSTR長度域的值是字串的位元組數,並且不包括0結束符 #include <comutil.h> #include 

CStringstring相互轉化

string轉CString std::string s="lskdjflkdjf"; CString str=s.c_str(); CString轉string USES_CONVERSION; CString temp; temp=_T("kjdsaflkjdlfkj");  char* s_

python筆記——jsonstring相互轉化

我在從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++中intstring相互轉換

一、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 stringint相互轉化

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++中intstring相互轉換

一、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 stringstring[]數組 的轉換

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