C语言 代码 求大神看看 困惑几天了 怎么修改 救命 啊救命

C代码
int calc_imei(char inp_imei[16], char out_imei[12])
{
char out_mask[12] = {0xAB, 0xA0, 0x6F, 0x2F, 0x1F, 0x1E, 0x9A, 0x45, 0x0, 0x0, 0x0, 0x0};
int i=0, j=0;

for (i=0, j=0; i < 15; i++, j++)
{

    if (inp_imei[i] < '0' || inp_imei[i] > '9')
    {
        return 1;
    }
    out_imei[j] = (inp_imei[i] - '0');

    if (i >= 14)
        break;

    if (inp_imei[i+1] < '0' || inp_imei[i+1] > '9')
    {
         return 1;
    }
    out_imei[j] += ((inp_imei[i+1] - '0') << 4);

    out_imei[j] = out_imei[j] ^ out_mask[j];
    i++;
}

out_imei[j] = out_imei[j] ^ out_mask[j];

out_imei[8] = 0x57;
out_imei[9] = 0xDB;

out_imei[10] = out_imei[11] = 0;

for (i = 0; i < 10; i++)
{
    if (i & 0x1)
    {
        out_imei[11] += out_imei[i];
    }
    else
    {
        out_imei[10] += out_imei[i];
    }
}

return 0;

}

自己写的转JAVA

char[] out_mask = { 0xAB, 0xA0, 0x6F, 0x2F, 0x1F, 0x1E, 0x9A, 0x45,
0x0, 0x0, 0x0, 0x0 };

    char[] out_imei = new char[12];

    int i = 0, j = 0;

    for (i = 0, j = 0; i < 15; i++, j++) {

        if (inp_imei[i] < '0' || inp_imei[i] > '9') {
            return null;
        }
        out_imei[j] = (char) (inp_imei[i] - '0');

        if (i >= 14)
            break;

        if (inp_imei[i + 1] < '0' || inp_imei[i + 1] > '9') {
            return null;
        }
        out_imei[j] += ((inp_imei[i + 1] - '0') << 4);

        out_imei[j] = (char) (out_imei[j] ^ out_mask[j]);
        i++;
    }

    out_imei[j] = (char) (out_imei[j] ^ out_mask[j]);

    out_imei[8] = 0x57;
    out_imei[9] = 0xDB;

    out_imei[10] = out_imei[11] = 0;

    for (i = 0; i < 10; i++) {
        if ((i & 0x1) != 0) {
            out_imei[11] += out_imei[i];
        } else {
            out_imei[10] += out_imei[i];
        }
    }

    return out_imei;

}



为什么不对 55555555555555555555

Java 中将 char 换成 BYTE 试试
如果问题还没有解决,建议你单步调度,看看哪一步的得到的值与 C 的不同。找到问题点,再分析肯定会简单很多。

你的代码意图是什么,输入输出要求是什么,看上去感觉在看天书啊。单步跟踪就能发现问题了。

注意java的char的字节大小

Java 中将 char 换成 BYTE 试试