2015-04-24 2 views
-2

Мне нужно отправить сообщение в следующем формате:Форматирование в C строку

"\x9F\x02\x06\x00\x00\x00\x07\x00\x00\x9F\x03\x06\x00\x00\x00\x00\x00\x00\x9A\x03\x15\x04\x24" (шестнадцатеричный байт)

Последние три шестнадцатеричные байта представляют дату.

Мне нужно получить дату из системы (платежный терминал) каждый раз, когда я хочу отправить это сообщение, дата задается системой имеют формат строки:

"150424"

Проблема заключается в том, что Мне нужно отформатировать эту дату в шестнадцатеричных байтах, а затем объединить результат с остальной частью сообщения!

Может ли кто-нибудь помочь мне решить эту проблему?

+1

Do у ou знать заранее, как долго будет строка, которую вы хотите отправить? Кроме того, вы можете взглянуть на строку формата% x (http://www.cplusplus.com/reference/cstdio/printf/) – Attilio

+3

Итак, для даты, которую вы хотите, [двоично-кодированный десятичный] (http://en.wikipedia.org/wiki/Binary-coded_decimal)? –

+1

'24' будет' \ x18', не так ли? А '15' будет' \ x0F'. Что вы пробовали? – Eregrith

ответ

1

EDIT: Итак, теперь, когда я понял проблему, вот ответ (я думаю, ^^).

Его проблема в том, что он получит дату как символ * (например, «150424»), и он хочет, чтобы произвести из этих символов => «\ 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] 

Надежда, которая помогла

+0

Проблема заключается в том, как я могу, получив новую дату, в таком формате: myStr [20] = '\ x15' @Sephizack –

+0

А как вы думаете, вы получаете его как строку, и вы не знаете как преобразовать его в '\ x15'? Это ваша реальная проблема, только что понятая. 2sec Я обновлю свой ответ, затем – Sephizack

+0

Спасибо @Sephizack –

Смежные вопросы