2014-10-16 218 views
0

我無法將常量字符轉換爲字節。我正在閱讀使用ifstream的文件,它給我的內容作爲字符串,然後我使用c_str()將字符串轉換爲常量字符。然後嘗試將其插入到字節數組以用於數據包發送目的。我是新來的C + +不能理解我必須如何將字符轉換爲字節,需要你的幫助球員。這裏是我的一段代碼,請給我一些建議從`const char *'轉換爲`byte'

byte buf[42]; 

const char* fname = path.c_str(); 

ifstream inFile; 
inFile.open(fname);//open the input file 

stringstream strStream; 
strStream << inFile.rdbuf();//read the file 
string str = strStream.str();//str holds the content of the file 

vector<string> result = explode(str,','); 

for (size_t i = 0; i < result.size(); i++) { 
    buf[i] = result[i].c_str(); // Here is Error 
    cout << "\"" << result[i] << "\"" << endl; 
} 

system("pause"); 

這是我從文件中取數據:(0x68,0x32,0x01,0x7B,0x01,0x1F,0x00,0x00,0x00,0x02,0x00, 0x00,0x00,0x00)

+3

這個'byte'類型是如何定義的?它不是標準C++的一部分... – 2014-10-16 13:36:53

+0

您正試圖在字節數組中存儲指向字符串的指針。 1個字節不能包含整個字符串。我不確定你想要做什麼。 – 2014-10-16 13:38:54

+1

'byte'不是C++ 11的標準類型。你的意思是[int8_t](http://en.cppreference.com/w/cpp/types/整數)? – 2014-10-16 13:41:07

回答

0

我自己做到了裏面,現在我會解釋的解決方案。所以我想每個「,」字符串(0x68,0x32,0x03,0x22 etc ..)變量拆分,然後將其轉換爲十六進制值後全部輸入到字節數組爲16位十六進制值。

char buf[42]; // Define Packet 

const char* fname = path.c_str(); // File Location 


ifstream inFile; // 
inFile.open(fname);//open the input file 

stringstream strStream; 
strStream << inFile.rdbuf();//read the file 
string str = strStream.str();//str holds the content of the file 



vector<string> result = explode(str,','); // Explode Per comma 


for (size_t i = 0; i < result.size(); i++) { // loop for every exploded value 

unsigned int x; 
std::stringstream ss; 
ss << std::hex << result[i]; // Convert String Into Integer value 
ss >> x; 
buf[i] = x; 

printf(&buf[i],"%04x",x); //Convert integer value back to 16 bit hex value and store into array 


    } 



    system("pause"); 

感謝所有的重播。

0

您正試圖將字符串(多個字符)分配給單個字節。它不適合。 試着這麼做

循環開始前補充一點:然後

size_t bufpos = 0; 

循環

const string & str = resulti[i]; 
for (size_t strpos = 0; strpos < str.size() && bufpos < sizeof(buf); ++strpos) 
{ 
    buf[bufpos++] = str[strpos]; 
} 
+0

是的但爆炸字符串(0x68,0x32,0x01,0x7B,0x01,0x1F,0x00 ...)作爲1十六進制值,並需要像這樣把數組[0] = 0x68,並且我想要有與此字節類似的字節數組buf [0121] = { 0x68,0x32,0x01,0x7B,0x01,0x1F,0x00,0x00,0x00, 0x02,0x00,0x00,0x00,0x00,0x00,0x03, 0x12,0x00,0x57,0x12,0x00 ,0x65,0x12,0x00,0x6C,0x12,0x00,0x63,0x12,0x00,0x6F,0x12,0x00,0x6D,0x12,0x00,0x65,0x00,0x00,0x00, 0x86,0x03 } – DTDest 2014-10-16 13:46:50

+0

其種類當你不斷改變目標並添加新元素時,很難回答你的問題。 'array [0]'從哪裏來?我建議你退後一步,確定你正在努力達到的目標,而不是將你所採取的方法放在低水平的問題上。 – 2014-10-16 13:50:45

+0

我的意思是字節buf [0]作爲數組[0],但無論如何,請回答我,如果你知道,如果我有字符串嘗試=「0x23」是否有可能將此字符串轉換爲字節值並將其插入字節buf [1] = {0x23},(對不起,我的英語) – DTDest 2014-10-16 13:55:27