2014-02-18 86 views
0

我試圖將char arry轉換爲字節(微軟類型,我正在使用visual studio)。事實是,我想填寫一個用於串口通信的DCB結構,並從.ini文件中取回信息。數據保存在char臨時緩衝區中。 DCB端口設置中的某些值需要以字節爲單位。我嘗試了很多方法,但沒有成功數據很好地從.ini中檢索,但我有一些問題將它們轉換爲字節。將char轉換爲字節C++

我可以將數值轉換爲整數,但它們也必須是字節。

而process-> read方法是GetPrivateProfileString的個人實現。

char res[10]; 
printf("\nReading port settings of %s\n", comName); 
processFileConfig->read(comName, "baudrate", "9600", res, sizeof(res)); 
baudr = atoi(res); 

processFileConfig->read(comName, "parity", "N", res, sizeof(res)); 
parity = (BYTE)res; 
std::cout << "size of Parity : "; 
std::cout << sizeof(parity) <<std::endl; 
std::cout << "content of Parity : "; 
std::cout << parity <<std::endl; 

processFileConfig->read(comName, "byteSize", "8", res, sizeof(res)); 
byteSize = atoi(res); 
std::cout << "biteSize : "; 
std::cout << byteSize <<std::endl; 


processFileConfig->read(comName, "stopBits", "1", res, sizeof(res)); 
stopBits = atoi(res); 
std::cout << "stopBits : "; 
std::cout << stopBits <<std::endl; 

portSettings.DCBlength = sizeof(portSettings); 
portSettings.BaudRate = baudr; //this one is OK 
portSettings.ByteSize = byteSize; // returns 
portSettings.Parity = parity; // returns nothing 
portSettings.StopBits = stopBits; // returns a smiley :) 

而且我file.ini的例子:

[COM1] 
baudrate=15000 
byteSize=8 
stopBits=1 
parity=N 

編輯:RES緩衝從在.ini返回良好的價值觀。這方面一切都很好。我只需要將最後三個值(byteSize,stopBits和parity)轉換爲無符號long。

+3

你是什麼意思的「有些問題」,你必須具體。簡單谷歌上的「WinAPI字節」指向[MSND](http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v = vs.85).aspx)其中指出*「BYTE - 一個字節(8位),這種類型在WinDef.h中聲明如下:typedef unsigned char BYTE;「*。我甚至不確定你會得到什麼問題。 – luk32

+0

「某些問題」:好吧,我無法將其轉換:p我也觀看了msdn字節,並且沒有被忽略。我試圖將返回的緩衝區(res)轉換爲無符號長緩衝區。 –

+1

@Mr。看起來你好像根本不知道什麼是錯的。你有種不能得到幫助。我很想說:「你可以,你只需要相信自己。」但相反,一個專業的「請發佈錯誤信息,或預期的和實際的輸出,最好有一個工作sscce。」 – luk32

回答

2

您當前的代碼嘗試將指向緩衝區的指針轉換爲​​。你需要做的是用strtoul()解析緩衝區,並將轉換爲​​,即

0

好的,我明白了。這是很容易最後,我不知道爲什麼我擋在它^^ 我創建了一箇中介unsigned long類型VAR:

processFileConfig->read(comName, "parity", "N", res, sizeof(res)); 
unsigned long parity_ul = res[0]; 
parity = parity_ul; 
std::cout << "parity : "; // 78 for 'N' 
std::cout << parity <<std::endl; 

portSettings.Parity = parity; 

std::cout << "Parity : "; 
std::cout << portSettings.Parity <<std::endl; // 'N' that's OK ! 

我與其他無符號值相同。我直接將atoi(res)的隱式演員(以及我認爲這是個術語)轉換爲無符號長整型值。根據VS調試器的值在portSettings中正確輸入,但是當我嘗試打印它們時失敗。這並不完美,但如果代碼工作,我認爲它是可以的。

感謝大家