天堂牧心 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 的不同。找到问题点,再分析肯定会简单很多。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog