MSVC用に書かれたC++コードをGCCまたはClang上で実行できるように変換しようとしています。UNALIGNED MSVC固有のコードを移植可能なC++コードに変換しますか?
問題のキーワードは
UNALIGNED
pDataををLPCBYTE
コードの例があるされている。
INT8 some8Value = *(UNALIGNED INT8 *)&(pData[offset]);
INT64 some64Value = *(UNALIGNED INT64 *)&(pData[offset]);
私は私が何を論理的に理解して考えますこのc odeは、pData + offsetを指すポインタから1バイトを読み込みたいとします。
もう1つは、pData +オフセットポインタから8バイトを読み込むことです。
混乱する部分は、なぜ最初のものが不一致なのかです。私は1バイトの読みが常に整列していると思った。
どういうわけかコードを誤解していますか?
は、次のこれを行うのクロスプラットフォームな方法です:その後、
INT8 part1 = pData[offset];
INT8 part2 = pData[offset + 1];
...
そして、INT64の場合には(例えば)8部を結合しますか?
8個の個々のオクテット( 'pData'は' INT8 * 'と仮定します)を読み込み、適切なビット操作でINT64にアセンブルしていますか?もしそうなら、正しく実行すればうまく動作し、移植可能ですが、 'UINT8'を使用します。あなたが気をつけなければならないのはサインビットにシフトしているだけです。正しいことをするのは難しいことです。とにかく、これは何箇所ですか? – WhozCraig
@WhozCraig pDataはLPCBYTEです。2番目の部分では、この8バイト整数を構成できるコードをどのように記述するかを提案しようとしています。私はここで助けを探しています、もし私の方法が間違っているなら、私はそれをやるでしょうか? – halivingston
私はFrankieの答え、btwと同意します。あなたは、これをハードウェアに置くつもりはないと仮定すると、データが整列していないことに悩まされます。インテルはそれについてかなり寛容になるかもしれません。ビッグブルーは*ではありません。 Sparcもそうではありません。 – WhozCraig