我需要按以下格式发送消息:
"\x9F\x02\x06\x00\x00\x00\x07\x00\x00\x9F\x03\x06\x00\x00\x00\x00\x00\x00\x9A\x03\x15\x04\x24"
(十六进制字节)
最后三个十六进制字节代表一个日期。
每次我想发送此消息时,我都需要从系统(支付终端)检索日期,系统给出的日期是字符串格式:
"150424"
问题是我需要将此日期格式化为十六进制字节,然后将结果与消息的其余部分连接起来!
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
编辑:好的,现在我明白了问题,这是答案(我认为^^)。
他的问题是他收到了作为char *的日期(例如" 150424")并且他想从那些chars =>中生成' \ X15' ' \ X04' ' \ X24'
以下是我的表现:
int i = 0;
char myStr[23] = "\x9F\x02\x06\x00\x00\x00\x07\x00\x00\x9F\x03\x06\x00\x00\x00\x00\x00\x00\x9A\x03\x00\x00\x00";
// get today's date
char date[6] = "150424";
int converted = strtol(date, NULL, 16);
myStr[20] = (converted & 0xFF0000) >> 16;
myStr[21] = (converted & 0xFF00) >> 8;
myStr[22] = converted & 0xFF;
printf("[%x", myStr[i] & 0xff);
for (i=1 ; i<23 ; ++i) printf(", %x", myStr[i] & 0xff);
printf("]\n");
return 0;
输出
[9f, 2, 6, 0, 0, 0, 7, 0, 0, 9f, 3, 6, 0, 0, 0, 0, 0, 0, 9a, 3, 15, 4, 24]
仅供参考:
你说你不需要将15转换为0x0F,但听起来很奇怪,因为0x15与当时的15没有任何共同点......
如果你想把小数改为:
char date[6] = "150424";
int converted = strtol(date, NULL, 10);
myStr[20] = (converted / 10000);
myStr[21] = (converted / 100) % 100;
myStr[22] = converted % 100;
然后输出变为:
[9f, 2, 6, 0, 0, 0, 7, 0, 0, 9f, 3, 6, 0, 0, 0, 0, 0, 0, 9a, 3, f, 4, 18]
希望有所帮助