Re: [問題] 困難的指標問題?

看板C_and_CPP作者時間8年前發表 (2016/12/12 05:43), 8年前編輯推噓3(305)
留言8則, 5人參與, 最新討論串3/4 (看更多)
各位好~基本上這是Android原本的Code.. 目前就是讀code在研究啦!!!因為很多地方沒有看懂... 有點類似讀一篇文章...但是讀下去..囧囧的 原始的Code如下: void btsnd_hcic_vendor_spec_cmd (void *buffer, UINT16 opcode, UINT8 len, UINT8 *p_data, void *p_cmd_cplt_cback) { BT_HDR *p = (BT_HDR *)buffer; UINT8 *pp = (UINT8 *)(p + 1); p->len = HCIC_PREAMBLE_SIZE + len; p->offset = sizeof(void *); *((void **)pp) = p_cmd_cplt_cback; /* Store command complete callback in buffer */ pp += sizeof(void *); /* Skip over callback pointer */ UINT16_TO_STREAM (pp, HCI_GRP_VENDOR_SPECIFIC | opcode); UINT8_TO_STREAM (pp, len); ARRAY_TO_STREAM (pp, p_data, len); btu_hcif_send_cmd (LOCAL_BR_EDR_CONTROLLER_ID, p); } 網址如下唷: https://android.googlesource.com/platform/system/bt/+/android-6.0.0_r1/stack/hcic/hcicmds.c 感謝大家 ※ 引述《blueguan ()》之銘言: : 在請問大家另外一個問題 如下: : UINT8 *pp = (UINT8 *)(p + 1); : *((void **)pp) = p_cmd_cplt_cback; : pp += sizeof(void *); : 請問這三行是怎麼處理? : ※ 引述《blueguan ()》之銘言: : : 開發平台(Platform): (Ex: Win10, Linux, ...) : : Linux/Android : : 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) : : GCC : : 問題(Question): : : 請問各位~我幾段Code不清楚~想請問大家 : : Q1). : : static int op(vendor_code_t opcode, void *param){ : : ... : : int *state = (int *) param; <== : : ... : : } : : 這邊指的是宣告一個指標 state. 並且把*state的位置給param並且轉化為int type. : : 請問我的理解有錯嗎?另外假如要轉為char type則就改成以下,是否正確 : : char *state = (char *)param; : : Q2). : : status = *((uint8_t *)(p_evt_buf + 1) + HCI_EVT_CMD_CMPL_STATUS_RET_BYTE); : : 這段 Code 我有點看不懂. 這到底是把值塞給status嗎? : : 所謂的 *((uint8_t *)(p_evt_buf + 1) 是指那一塊塞過去呢? : : p = (uint8_t *)(p_buf + 1); : : 哪這段 Code 跟剛原本的差異是在哪? : : 感謝各位大大.謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.205.85 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1481521414.A.F52.html ※ 編輯: blueguan (1.164.205.85), 12/12/2016 13:44:48

12/12 13:53, , 1F
對C不熟,看NDK會很難過
12/12 13:53, 1F

12/12 15:22, , 2F
把buffer當作一個BT_HDR array, 因此pp = p+1 就是pp指
12/12 15:22, 2F

12/12 15:22, , 3F
向第二個BT_HDR開頭,而BT_HDR前幾個byte是用來存callba
12/12 15:22, 3F

12/12 15:22, , 4F
ck func pointer, p_cmd_cp....那行就是來覆蓋掉原本的c
12/12 15:22, 4F

12/12 15:22, , 5F
allback,接著pp會移到這個callback後面
12/12 15:22, 5F

12/12 17:18, , 6F
藍芽 XD
12/12 17:18, 6F

12/13 22:35, , 7F
看到HCI的字眼 有猜到 xD
12/13 22:35, 7F

12/13 23:33, , 8F
哈~對啊!是藍芽...我大概懂了!! 感謝各位大大
12/13 23:33, 8F
文章代碼(AID): #1OJZa6zI (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1OJZa6zI (C_and_CPP)