私は当時、reinterpret_cast<>
それをどのように使用すべきかについて多くのことを読んできました(そしてほとんどの場合、それを避けてください)。
reinterpret_cast<>
to を使用して from をキャストすることは理解していますが、 unsigned char*
tochar*
は実装で定義されている(したがって非移植性) であり、一方を他方に効率的に変換する方法は他にないようです。
unsigned char*
いくつかの計算を処理するために扱うライブラリを使用するとしましょう。内部的には、私はすでにchar*
自分のデータを保存するために使用しています(変更すると子犬が殺されるため、変更できません)。
私は次のようなことをしたでしょう:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
// We use it here
// processData() takes a unsigned char*
void processData(reinterpret_cast<unsigned char*>(mydata), mydatalen);
// I could have done this:
void processData((unsigned char*)mydata, mydatalen);
// But it would have resulted in a similar call I guess ?
コードの移植性を高めたい場合は、最初にデータをコピーするしかないようです。何かのようなもの:
char* mydata = getMyDataSomewhere();
size_t mydatalen = getMyDataLength();
unsigned char* mydata_copy = new unsigned char[mydatalen];
for (size_t i = 0; i < mydatalen; ++i)
mydata_copy[i] = static_cast<unsigned char>(mydata[i]);
void processData(mydata_copy, mydatalen);
もちろん、それは非常に最適ではなく、最初のソリューションよりも移植性が高いかどうかさえわかりません。
問題は、移植性の高いコードを作成するには、この状況で何をするかということです。