Цитата(TechMike @ Oct 19 2008, 20:29)

Не получается, делаю так:
Код
#include <stdio.h>
char idd1[8];
char idd2[8];
ReadKey(idd1,2); //в idd1 серийник таблетки (8 байт)
sprintf(idd2,"%02X",(int)idd1);
USART_Send_srt(idd2); //выводим в USART idd2
В терминале выводит число "13A", хотя в idd1 всего 8 байт, почему так????
P.S. Просьба помочь советом, а не посылать к учебнику.
Во-первых внимательно читайте что Вам пишут. Если нужно вывести 8 байт, то не забываем про \0 в конце. printf именно по нему определяет что пора остановиться. Второе, зачем каставали к int ? У вас передано название массива - что воспрнимается как указатель, а Вы еше кастанули к int. Компилер сишный использует двухбайтовые указатели даже для 8-и битной платформы. Вот и вывелось двухбайтное число (0х13А).
Третье, у Вас массив из hex-ов. Я может не прав (в плане вывода массива - можно использовать цикл и конкатенацию) но попробуйте сделать так - самый быстрый способ проверки:
Код
char *str[9];
unsigned char idd2[8];
sprintf(str, "%02X%02X%02X%02X%02X%02X%02X%02X", idd2[0], idd2[1], idd2[2], idd2[3], idd[4], idd2[5], idd2[6], idd2[7]);
USART_Send_srt(*str); //выводим в USART idd2
Почитайте, что есть указатель, что есть строка. Чем массив char'ов отличается от стринга. Форматирование. Преобразование типов. Работу с указателями. Программит станет намного проще.
И выкиньте CV AVR. У него си очень далек от стандартного. Потому собирать кочки будете сами и расхлебывать тоже.
Сообщение отредактировал MTh - Oct 20 2008, 01:10