我知道无符号数永远不会小于0,也不需要测试它。 但我想避免调谐器的伪频率。
/* freqKHz is in KHz (duh) */
void videoinput_set_tuner_freq( videoinput_t *vidin, int freqKHz )
{
unsigned long frequency = freqKHz;
if( videoinput_has_tuner( vidin ) ) {
if( frequency < 0 ) {
/* Ignore bogus frequencies. */
return;
}
frequency *= 16;
vidin->tunerlow = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 1 : 0;
if( !vidin->tunerlow ) {
frequency /= 1000; /* switch to MHz */
}
...
}
是否有可能以另一种方式进行此检查(可能有限制)?
想出一个更好的“虚假”频率定义,这个频率不可能存在。
如果数字驱动器自调谐后未发生变化,则不会设置频率。 模拟调谐器驱动器对数字驱动器节省的频率一无所知。 使用video4linux代码设置频率时,硬件会发生变化但是 数字驱动程序的状态不会更新。
答案 0 :(得分:0)
1正在转换
unsigned long frequency = freqKHz;
执行签名检查
if( freqKHz < 0 ) { // note: freqKHz
/* Ignore bogus frequencies. */
return;
2根据您的申请,随后检查合理的界限也是一种良好做法。当然,最低限度的检查可以与上述结合起来。
if((frequency < MinFreq ) || (( frequency > MaxFreq ) {
/* Ignore bogus frequencies. */
return;
3推荐四舍五入转换:
frequency = (frequency + 1000/2) / 1000; /* switch to MHz */