问题描述
- 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 试试
时间: 2025-01-26 19:27:23