Чт янв 26, 2017 14:38:55
*((uint8_t*)&wav_header)
*((uint8_t*)&wav_header + 5)
*((uint8_t*)&wav_header + 30)
Чт янв 26, 2017 17:19:51
Чт янв 26, 2017 17:42:37
Чт янв 26, 2017 18:42:12
нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?! ну берите тогда сырой массив, и обращайтесь, если с указателями траблыFreshMan писал(а):как обратится, считать данные, к примеру, с 0 или 5 или 30 байта данной структуры ?
typedef struct{
char chunkId[4];
char format[4];
char subchunk1Id[4];
unsigned short audioFormat;
unsigned short numChannels;
unsigned long sampleRate;
unsigned long byteRate;
unsigned short blockAlign;
unsigned short bitsPerSample;
char subchunk2Id[4];
unsigned long subchunk2Size;
}HEADER;
typedef union{
unsigned char raw_bytes[sizeof(HEADER)];
HEADER struct_data;
} COMMON_HEADER;
COMMON_HEADER wav_header;
wav_hader.raw_bytes[15] = 0; // обнуляем 15-й байт в структуре, наплевав на ее поля
wav_header.struc_data.audioFormat = 12; // а теперь делаем бяку через поле
Чт янв 26, 2017 18:53:03
ARV писал(а):нахрена иметь структуру, чтобы потом обращаться к ее данным мимо поименованных полей?!
Чт янв 26, 2017 18:59:38
sprintf(str, "SampleRate = %lu", wav_header.SampleRate);
Пт янв 27, 2017 09:27:25
ARV писал(а):ну так и выводите поля структуры! нафига побайтно-то?
sprintf(str, "SampleRate = %lu", wav_header.SampleRate);
Пт янв 27, 2017 09:42:54
str - это массив символов, т.е. строка. тип выводимого поля должен соответствовать формату вывода, но и только! компилятор не будет ругаться.FreshMan писал(а):компилятор начинает ругатся что тип массива str не соответствует выводимому полю структуры
я понятия не имею, как вы планируете выводить на ЖКИ 2х16 кучу полей из заголовка WAV-файла... и зачем это вообще делать... вы правы в одном: каждое поле придется выводить отдельным форматом, соответствующим этому полю, а вот строка-результат, которая будет хранить символьное представление полей, может быть одна и та же.FreshMan писал(а):под кажое поле надо свою выводную строку создавать ?
printf_P(PSTR("поле1=%d\nполе2=%d"), поле1, поле2);
Пт янв 27, 2017 09:43:09
sprintf(str, "SampleRate = %lu", (unsigned long)wav_header.SampleRate);
Пт янв 27, 2017 09:52:31
Пт янв 27, 2017 09:54:50
Пт янв 27, 2017 10:08:36
так вообще нельзя! str должен быть заведомо бОльшего размера, чем самая длинная строка, формируемая sprintf-ом!FreshMan писал(а):вот только char str[];
Пт янв 27, 2017 10:18:53
ARV писал(а): должно быть char str[24];
Пт янв 27, 2017 10:31:41
я думаю, если вы вспомните, где это читали и найдете ту книжку, ее надо будет бросить в печку - компилятор никому ничего не должен.FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
Пт янв 27, 2017 11:21:44
FreshMan писал(а):а почему компилятор выдает предуприждение когда я делаю безразмерный массив ?
FreshMan писал(а):где-то читал что он в таком случае должен сам определить его размер
char str[] = "фгчтрчгтр";
Пн фев 27, 2017 17:40:05
Вт фев 28, 2017 08:57:10
vitalekmail писал(а):Нужно загрузить картинку с флешки,
Пт мар 03, 2017 11:18:15
.sn = {255, 255, 0, 0},
.gw = {192, 168, 0, 0},
flash const long int array[2][7]={
.[0]={123,1,2,3,......},
.[1]={123,1,2,3,......}
};
Пт мар 03, 2017 11:54:23
pokk писал(а):На такое компилятор ругается.
flash const long int array[2][7] = {
{ 123, 1, 2, 3, },
{ 123, 1, 2, 3, }
};
Пт мар 03, 2017 16:38:34
можно ли про инициализировать массив не по порядку
flash const long int array[2][7] = {
{ 123, 1, 2, 3, }, // Эта первая строка
{ 123, 1, 2, 3, } // Это нулевая строка
};