2017-06-12 5 views
0

16進バイトの理解に問題があります。 マニュアルでヘッダーIDがhex-asciiで7Fhと記載されている場合、それは0111 1111の意味ですか?オンラインの16進数変換器に従った10進数で127に変換されます。16進数を10進数に正しく変換します

string dataString; 
//cout << dataString << endl; 
//the output of dataString starts with "7F0304" 

struct SENSOR_O 
{ 
    fLeader fixedLeader; 
    vLeader varLeader; 
    vel  velocity; 
    pos  position; 
    bTrack bottomTrack; 
    bool error; 
    std::string error_msg; 
}; 

SENSOR_O datafields; 
datafields = ParseData(dataString) 

my class::SENSOR_O myclass::ParseData(const std::string &data) 
{ 
const unsigned char *memblock; 
ifstream::pos_type size; 
ifstream test; 
vector<double> dataSum; 
int headerID = 125; 
int startID = 0; 

memblock = reinterpret_cast<const unsigned char *>(data.data()); 
cout << data[0] << data[1] << data[2] << data[3] << endl; 

cout << "check value: "<< memblock[startID] << ", " << memblock[startID+1]<< endl; 
cout << "double check value: " << double(memblock[startID]) << ", " << double(memblock[startID+1]) << endl; 
cout << "7F should give me 127. Yes? Added total is: " << double(memblock[startID]) + double(memblock[startID+1]) << ends; 

} 

私が見出力は、私がここで間違ってやっていること

7F03 
7, F 
55, 70 
7F should give me 127. Yes? Added total is: 125 

のですか?

+0

ようなものになることができ、あなたのケースで、あなたは、関連するコードの残りの部分を示していただけますか? – xunatai

+0

これで十分であるはずです。何か他のものが必要な場合は教えてください:) –

答えて

1

あなたは右から0x7Fは127だが...

あるb01111111であることを理論的に私はmemblockがchar配列であると仮定していますされ、その後、何をここでやっていることは2つの数値を追加している - 「7」持っています小数点の値が55で、 'F'の値が70で正しい結果が得られます125.

文字列の16進表記を数値に変換すると仮定すると、複数の選択肢があります。 strtolは、あなたもここにhex string to int

EDITこの質問をチェックすることができます。[OK]を

string data = "7F03"; 
string toConvert = data.substr(0, 2); 
int val = strtol(toConvert.c_str(), NULL, 16); 
+0

提案をいただきありがとうございます。 stratalは受け入れる変数の種類が非常に厳しいようです。私はそれを丸めるように見えることはできません。 –

関連する問題