#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef unsigned char byte;
void change(byte *src, byte *out, int *outlen)
{
byte temp = 0;
*outlen = 0;
for(size_t i = 0; i <= strlen((char*)src); i++)
{
if(isdigit(src[i]))
temp |= (src[i] - '0') << (temp == 0 ? 4 : 0);
else if(isupper(src[i]))
temp |= (src[i] - 'A' + 10) << (temp == 0 ? 4 : 0);
else if(islower(src[i]))
temp |= (src[i] - 'a' + 10) << (temp == 0 ? 4 : 0);
else if(src[i] == ' ' || src[i] == 0)
{
printf("%02X\t", temp);
*out++ = temp;
(*outlen)++;
temp = 0;
}
}
puts("");
}
void display(byte *out, int outlen)
{
printf("outlen = %d\n", outlen);
for(int i = 0; i < outlen; i++)
printf("out[%d] = %02X\n", i, out[i]);
}
int main(int argc, char* argv[])
{
byte src[] = "7E 00 38 6A 44 3A 5C 74 2E A2 B3 D5";
byte out[100] = {0};
int outlen = 0;
change(src, out, &outlen);
display(out, outlen);
return 0;
}
运行结果:
7E 00 38 6A 44 3A 5C 74 2E A2 B3 D5
outlen = 12
out[0] = 7E
out[1] = 00
out[2] = 38
out[3] = 6A
out[4] = 44
out[5] = 3A
out[6] = 5C
out[7] = 74
out[8] = 2E
out[9] = A2
out[10] = B3
out[11] = D5
Press any key to continue