在c程序中使用linux的无线工具,我做了一次网络扫描,希望找到每个检测到的网络的信号强度(dBm)。Wireless.h如何打印出信号电平?
我发现下面的wireless.h:
struct iw_quality
{
__u8 qual; /* link quality (%retries, SNR,
%missed beacons or better...) */
__u8 level; /* signal level (dBm) */
__u8 noise; /* noise level (dBm) */
__u8 updated; /* Flags to know if updated */
};
我打印出在我的C程序这样的 “级别”:
printf("Transmit power: %lu ", result->stats.qual.level);
也试过%d ,但得到了相同的输出。
结果我得到的是看起来像178,190,201,189等数...
有没有机会,这些数字是在瓦?根据瓦特 - > dBm转换器,178瓦特是大约。 52.50dBm?
应该改为什么?因为我认为dBm可以转化为-80dBm或其他。
我需要转换这些数字吗?我如何获得正确的输出?
谢谢!
======= UPDATE =========
我注意到一些奇怪的行为。当我通过我的程序使用wireless.h的level属性时,我记录的“最强”值约为-50dBm,而使用相同的路由器时,当我运行“iw wlan0 scan”时,我收到约-14dBm作为最强信号。
有谁知道是什么原因造成这种差异?
是__u8一个unsigned int?为什么使用一个无符号的int来表示一个预期为负的值? –
-80 dBm是移动网络的典型代表,您使用的是? –
@SList我不知道。 __u8意味着对吗?也许我正在寻找错误的头文件?但它在评论中明确指出,这是针对dBm的。我正在扫描WiFi接入点,我给出的-80仅仅是一个例子。我只知道它应该是消极的。 – bubbly