我是C语言的新手,我写了一个简单的程序,它生成一个具有指定频率和采样率的正弦波,并将其作为一个无符号的8位字节发送到stdout。
#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更好的替代品,我可以使用它来正确地绕回呢?
https://stackoverflow.com/questions/50709925
复制相似问题