2 tiantangmuxin tiantangmuxin 于 2015.06.03 12:07 提问

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

4个回答

91program
91program   Ds   Rxr 2015.06.03 12:43

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

tiantangmuxin
tiantangmuxin 感谢 我试试
接近 3 年之前 回复
chaobo_lu
chaobo_lu   2015.06.03 22:26

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

syrlyz
syrlyz   2015.06.04 11:42

注意java的char的字节大小

datou431
datou431   Rxr 2015.06.18 15:27

Java 中将 char 换成 BYTE 试试

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!