天堂牧心 2015-06-03 04:07 采纳率: 33.3%
浏览 1685

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 博客专家认证 2015-06-03 04:43
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗