私はC++からJavaにいくつかのコードを移植しようとしています。コードはC++で次のようになります。この変数はどのようにintとして使用され、cppでは配列として使用されますか?
uint8_t r, g, b, bit, limit, *ptr;
...
if(y < nRows) {
// Data for the upper half of the display is stored in the lower bits of each byte.
ptr = &matrixbuff[backindex][y * WIDTH * (nPlanes - 1) + x]; // Base addr
// Plane 0 is a tricky case -- its data is spread about,
// stored in least two bits not used by the other planes.
ptr[WIDTH*2] &= ~B00000011; // Plane 0 R,G mask out in one op
if(r & 1) ptr[WIDTH*2] |= B00000001; // Plane 0 R: 64 bytes ahead, bit 0
if(g & 1) ptr[WIDTH*2] |= B00000010; // Plane 0 G: 64 bytes ahead, bit 1
if(b & 1) ptr[WIDTH] |= B00000001; // Plane 0 B: 32 bytes ahead, bit 0
else ptr[WIDTH] &= ~B00000001; // Plane 0 B unset; mask out
// The remaining three image planes are more normal-ish.
// Data is stored in the high 6 bits so it can be quickly
// copied to the DATAPORT register w/6 output lines.
for(; bit < limit; bit <<= 1) {
*ptr &= ~B00011100; // Mask out R,G,B in one op
if(r & bit) *ptr |= B00000100; // Plane N R: bit 2
if(g & bit) *ptr |= B00001000; // Plane N G: bit 3
if(b & bit) *ptr |= B00010000; // Plane N B: bit 4
ptr += WIDTH; // Advance to next bit plane
}
} else {
// Data for the lower half of the display is stored in the upper
// bits, except for the plane 0 stuff, using 2 least bits.
ptr = &matrixbuff[backindex][(y - nRows) * WIDTH * (nPlanes - 1) + x];
*ptr &= ~B00000011; // Plane 0 G,B mask out in one op
if(r & 1) ptr[WIDTH] |= B00000010; // Plane 0 R: 32 bytes ahead, bit 1
else ptr[WIDTH] &= ~B00000010; // Plane 0 R unset; mask out
if(g & 1) *ptr |= B00000001; // Plane 0 G: bit 0
if(b & 1) *ptr |= B00000010; // Plane 0 B: bit 0
for(; bit < limit; bit <<= 1) {
*ptr &= ~B11100000; // Mask out R,G,B in one op
if(r & bit) *ptr |= B00100000; // Plane N R: bit 5
if(g & bit) *ptr |= B01000000; // Plane N G: bit 6
if(b & bit) *ptr |= B10000000; // Plane N B: bit 7
ptr += WIDTH; // Advance to next bit plane
}
}
私はptr
の使用を理解していないそれは、intとして宣言されています。
uint8_t ... *ptr;
そして、それはいくつかに設定されています値
ptr = &matrixbuff...
しかしアレイ
ptr[WIDTH*2] &= ~B00000011;
何として使用しているようですか?これはintとして宣言されている
'uint8_t'に*ポインタ*として宣言されています - この場合は配列を指しているようです – UnholySheep
これは配列の動作ではありません。' * ptr&=〜B00011100; 「そう? – Blundell
Javaは数値ポインタを使用せず、オブジェクトへの抽象的な参照を使用します。あなたはここでやっているようにポインタ演算を行うことはできません。 – Novaterata