int compare_acd(const void *a, const void * b)
{
return ( (int)(*((ADC_VALUE_TYPE*)a)) - (int)(*((ADC_VALUE_TYPE*)b)) );
}
Run Code Online (Sandbox Code Playgroud)
在我的情况ADC_VALUE_TYPE是uint16_t,但就是不能排除.
不需要外部括号,return不是函数.
除此之外,我看不出有什么问题...你在解除引用之前投射指针,读取正确的位数,然后"向上转换"到int.
更新:根据你的评论,你似乎想要一个否定的回报,例如,如果指向的值a小于指向的值b,那么你需要转换为有符号的类型.我想这很好,不是100%肯定是否需要,但至少它很清楚发生了什么.
当然,为了更加清晰,它可以分解为多个语句:
int compare_acd(const void *a, const void * b)
{
const ADC_VALUE_TYPE va = *(ADC_VALUE_TYPE) a;
const ADC_VALUE_TYPE vb = *(ADC_VALUE_TYPE) b;
/* Cast to int to get signed response if a < b. */
return (int) va - (int) vb;
}
Run Code Online (Sandbox Code Playgroud)
这可能就是我写它的方式.