ユーザーに複数の16進文字列をコンソールに入力してから、それらの文字列をビットセットに変換するように求める関数を作成しようとしています。関数がビットセットへのポインターを使用して、ビットセットが親関数に格納されるようにしたい。C ++ 11を使用していないため、64ビットビットセットを2つの16進変換操作に分割しました。
void consoleDataInput(bitset<1> verbose, bitset<32>* addr, bitset<64>* wdata, bitset<8>* wdata_mask, bitset<1>* rdnwr)
{
cout << "enter 1 for read 0 for write : ";
cin >> *rdnwr;
string tempStr;
unsigned long tempVal;
istringstream tempIss;
// Input the addr in hex and convert to a bitset
cout << "enter addr in hex : ";
cin >> tempStr;
tempIss.str(tempStr);
tempIss >> hex >> tempVal;
*addr = tempVal;
// enter wdata and wdata_mask in hex and convert to bitsets
if (rdnwr[0] == 1)
{
*wdata = 0;
*wdata_mask = 0;
}
else
{
// wdata
bitset<32> tempBitset;
cout << "enter wdata in hex : ";
cin >> tempStr;
if (tempStr.length() > 8)
{
tempIss.str(tempStr.substr(0,tempStr.length()-8));
tempIss >> hex >> tempVal;
tempBitset = tempVal;
for (int i=31; i>=0; i--)
{
wdata[i+32] = tempBitset[i];
}
tempIss.str(tempStr.substr(tempStr.length()-8,tempStr.length()));
tempIss >> hex >> tempVal;
tempBitset = tempVal;
for (int i=32; i>=0; i--)
{
wdata[i] = tempBitset[i];
}
}
else
{
tempIss.str(tempStr);
tempIss >> hex >> tempVal;
tempBitset = tempVal;
for (int i=32; i>=0; i--)
{
wdata[i] = tempBitset[i];
}
}
// wdata_mask
cout << "enter wdata_mask in hex : ";
cin >> tempStr;
tempIss.str(tempStr);
tempIss >> hex >> tempVal;
*wdata_mask = tempVal;
}
code :: blocksでGCCを使用してコンパイルしようとするとエラーが発生します
C:\Diolan\DLN\demo\ApolloSPI\main.cpp|202|error: no match for 'operator=' in '*(wdata + ((((sizetype)i) + 32u) * 8u)) = std::bitset<_Nb>::operator[](std::size_t) [with unsigned int _Nb = 32u; std::size_t = unsigned int](((std::size_t)i))'|
線を強調しているのはどれですか
wdata[i+32] = tempBitset[i];
私が理解しているように、これはポインタであることを示すものとして機能するwdata[i+32]
ため、以前は*演算子を使用する必要はありません[i+32]
。
どうすれば前進できるかわかりません。=
オペレータは、私は、エラーを理解していないので、ビットセットで使用する有効なものです。
ありがとう。
wdataは確かにポインタであるため、wdata [i + 32]は実際には*(wdata + i + 32)と同等であり、ビットセット<64>を指します。このビットセットをtempBitset [i]で割り当てています。これは、私が間違えない限り、シングルビットです。
つまり、1つのビットの値をビットセット全体に割り当てようとしています。
あるビットセットの1つのビットを別のビットセットのビットの値に設定したいと思っているのではないかと思います。その場合は、「*」が必要だと思います。
(*wdata)[i+32] = tempBitset[i];
つまり、大まかに言って、wdataが指すビットセット<64>を取得し、そのビット[i +32]をtempBitsetのビットセットのビット[i]と同じ値に設定します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加