そのため、私はCプログラムを受け取りました。これは、順調に進んでいるJavaに変換することで、より移植性を高めようとしています。しかし、私は少しのハングアップに遭遇しました。それはこのコードのビットにあると私は信じています。これは、30バイトのフレームを解凍する関数にすぎません。変数型の問題に直面しているような気がします。Cから引き継がれないJava型をサブ化する最善の方法を見つけようとしています。問題がどこにあるかを誰かが知っているなら、それをいただければ幸いです。
Java:
public static byte[] unPackBits(byte[] Src, int bitOffset, byte[] Dst, int bitCount){
int srcByteOffset, srcBit;
int dstByteOffset, dstBit;
char dstMask, srcMask;
srcByteOffset = bitOffset / 8;
srcBit = bitOffset % 8;
srcMask = (char)(0x01<<srcBit);
dstByteOffset = 0;
dstBit = 0;
dstMask = 0x01;
Dst[dstByteOffset] = '\0';
for(int b = 0; b < bitCount; b++){
if((Src[srcByteOffset] & srcMask) != (char)0x00){
Dst[dstByteOffset] = (byte)(Dst[dstByteOffset]|dstMask);
}
else {
Dst[dstByteOffset] = (byte)(Dst[dstByteOffset] & (~dstMask));
}
srcBit++;
if(srcBit < 8) {
srcMask = (char)(srcMask<<1);
}
else {
srcByteOffset++;
srcBit = 0;
srcMask = 0x01;
}
dstBit++;
if(dstBit < 8) {
dstMask = (char)(dstMask<<1);
}
else {
dstByteOffset++;
dstMask = 0x01;
dstBit = 0;
}
}
return Dst;
}
C:
void TRB::unPackBits(char *Src, int BitOffset, char *Dst, int BitCount) {
int srcByteOffset, srcBit;
int dstByteOffset, dstBit;
char dstMask, srcMask;
srcByteOffset = BitOffset / 8;
srcBit = BitOffset % 8;
srcMask = 0x01<<srcBit;
dstByteOffset = 0;
dstBit = 0;
dstMask = 0x01;
Dst[dstByteOffset] = '\0';
for(int b = 0; b < BitCount; b++) {
if((Src[srcByteOffset] & srcMask) != (char)0x00) {
Dst[dstByteOffset] = Dst[dstByteOffset] | dstMask;
}
else {
Dst[dstByteOffset] = Dst[dstByteOffset] & (~dstMask);
}
srcBit++;
if(srcBit < 8) {
srcMask = srcMask<<1;
}
else {
srcByteOffset++;
srcBit = 0;
srcMask = 0x01;
}
dstBit++;
if(dstBit < 8) {
dstMask = dstMask<<1;
}
else {
dstByteOffset++;
dstMask = 0x01;
dstBit = 0;
}
}
}