在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