Я довольно новичок в C и написал простую программу, которая генерирует синусоидальную волну с заданной частотой и частотой дискретизации и отправляет ее на стандартный вывод в виде 8-разрядного байта без знака.
#include <stdio.h>
#include <math.h>
#include <stdint.h>
uint8_t sinco(int iCarrier, int iSampleRate, unsigned long ulIndex){return (sin(iCarrier * (2 * M_PI) * ulIndex / iSampleRate) * 127) + 128;}
void main(){
unsigned long t;
const int iCarrier = 500;
const int iSampleRate = 8000;
for(t=0;;t++){
putchar(sinco(iCarrier, iSampleRate, t));
}
}
Я понимаю, что putchar () была не самой подходящей функцией, но она работала для того, что мне было нужно в то время.Сейчас я пытаюсь изменить программу для вывода беззнакового 16-битного числа, но я не уверен, что заменить putchar () на.
Это то, что я до сих пор:
#include <stdio.h>
#include <math.h>
#include <stdint.h>
uint16_t sinco(int iCarrier, int iSampleRate, unsigned long ulIndex){return (sin(iCarrier * (2 * M_PI) * ulIndex / iSampleRate) * 65535) + 65536;}
void main(){
unsigned long t;
const int iCarrier = 500;
const int iSampleRate = 8000;
for(t=0;;t++){
printf(%hu, sinco(iCarrier, iSampleRate, t));
}
}
Однако, когда значение становится больше, чем 65 536, программа начинает отправлять 32 бита на стандартный вывод.Есть ли лучшая альтернатива putchar, которую я могу использовать, которая будет правильно оборачиваться?