2011-08-30 52 views
5

在UMTS中,我得到了getCid()(大於允許值)返回的大數。這是UTRAN小區身份(UC-ID)嗎?getCid返回的UTRAN小區標識()

UC-Id = RNC-Id + C-Id 

有人知道嗎?如何從UC-Id獲得C-Id

感謝和, 尼

+1

我覺得沒有人真的瞭解你的問題的核心,請更具體 – barmaley

+2

好了,在GSM getCid()返回的CELLID細胞。據我所知,在UMTS中,接收的值包括RNC的標識符和小區的標識符。這意味着UMTS網絡中由getCid()返回的長整數(7-9數字)包含兩個數字,但我只想要CellId。我認爲方式如下:C-Id = UC-Id%65536和RnC-Id =(UC-Id) - (C-Id)/ 65536。或者爲什麼UMTS中的返回值是一個大於65536的數字,如果android文檔是正確的,那麼這是最大允許值。 – Benny

回答

3

嘗試 (小區ID%65536) 它爲我工作。

6

如果網絡類型爲UMTS/HSxPA/HSPA +,則RNC標識是4字節小區標識(3GPP 25.401,第6.1.5節)的前2個字節。「
我有權訪問運營商網絡,在系統檢查,它的真實和正確的
此基礎上,請看看我的代碼,你怎麼能輕易得到RNCID + CID:
轉換CID到的ByteArray:

public static byte[] convertByteArray__p(int p_int){ 
    byte[] l_byte_array = new byte[4]; 
    int MASK_c = 0xFF; 
    for (short i=0; i<=3; i++){ 
     l_byte_array[i] = (byte) ((p_int >> (8*i)) & MASK_c); 
    } 
    return l_byte_array; 
} 


獲取RNCID和CID:

public int getRNCID_or_CID__p(byte[] p_bytes, short p_which){ 
    int MASK_c = 0xFF; 
    int l_result = 0; 
    if (p_which == Constants.CID_C) { 
     l_result = p_bytes[0] & MASK_c ; 
     l_result = l_result + ((p_bytes[1] & MASK_c) << 8); 
    } else if (p_which == Constants.RNCID_C){ 
     l_result = p_bytes[2] & MASK_c ; 
     l_result = l_result + ((p_bytes[3] & MASK_c) << 8); 
    } else { 
     g_FileHandler.putLog__p('E', "getRNCID_or_CID__p invalid parameter"); 
    } 
    return l_result;  
} 


比你可以輕鬆地調用這樣的:

 byte[] l_byte_array = new byte[4]; 
     l_byte_array = convertByteArray__p(l_cid); 
     int l_RNC_ID = getRNCID_or_CID__p(l_byte_array,Constants.RNCID_C); 
     int l_real_CID = getRNCID_or_CID__p(l_byte_array,Constants.CID_C); 


常量RNCID_C(1)和CID_C(2)僅contants只是對我來說,單獨哪個參數將傳遞。

2

如果CID是> 65536,這是不實際的小區ID,但真正的CellID和RNC-ID的線性組合:

UTRAN_CELL_ID = RNCID x 65536 + CellID 

要提取的CellID,使用模運算:

CellID = UTRAN_CELL_ID % 65536 

要提取RNCID,得到的整數部分:

RNCID = UTRAN_CELL_ID/65536 
+0

RNCID應該等於(UTRAN_CELL_ID - UTRAN_CELL_ID%65536)/ 65536 – vladiz

相關問題