问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <initializer_list>
#include <stdint.h>
typedef unsigned int uint32;
uint32 seed_temp_level1 = 0;
uint32 key_temp_level1 = 0;
uint32 seed_temp_level2 = 0;
uint32 key_temp_level2 = 0;
int seed[4];
char key[4];
char k[4];
uint32 OBDII_ComputeKey_Function1((uint32)seed_temp_level1)
{
uint32 seedtemp1 = seed;
uint32 seedtemp2 = ~seed;
uint32 sum = 0, delta = 0x0ab16000;
k[0] = 0x4c495551;
k[1] = 0x49534545;
k[2] = 0x444b4559;
k[3] = 0x414c474f;
for (int i = 0;i < 2;i++)
{
seedtemp1 += (((seedtemp2 << 4) ^ (seedtemp2 >> 5)) + seedtemp2) ^ (sum + k[sum & 3]);
sum += delta;
seedtemp2 += (((seedtemp1 << 4) ^ (seedtemp1 >> 5)) + seedtemp1) ^ (sum + k[(sum >> 11) & 3]);
}
key = seedtemp1;
return key;
}
void main() {
for (int i = 0;i < 4;i++) scanf("%x", &seed[i]);
seed_temp_level1 = (seed[3]) + (seed[2] * 256) + (seed[1] * 65536) + (seed[0] * 16777216);
key_temp_level1 = OBDII_ComputeKey_Function1(seed_temp_level1);
key[0] = (key_temp_level1 >> 24) & 0xFF;
key[1] = (key_temp_level1 >> 16) & 0xFF;
key[2] = (key_temp_level1 >> 8) & 0xFF;
key[3] = (key_temp_level1) & 0xFF;
}
我的解答思路和尝试过的方法
格式已经用notepad刷过,还是有问题