格式化C字符串

问题描述 投票:-2回答:1

我需要以以下格式发送消息:

"\x9F\x02\x06\x00\x00\x00\x07\x00\x00\x9F\x03\x06\x00\x00\x00\x00\x00\x00\x9A\x03\x15\x04\x24"(十六进制字节)

[最后三个十六进制字节代表一个日期。

每次发送此消息时,我都需要从系统(付款终端)检索日期,系统给出的日期具有字符串格式:

"150424"

问题是,我需要将此日期格式化为十六进制字节,然后将结果与消息的其余部分连接起来!

有人可以帮助我解决这个问题吗?

c string hex
1个回答
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]

希望有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.