→ Caesar08: dataLength超過實際大小是使用者的問題吧,應該不用管 03/22 10:21
所以我應該本著使用者不會耍蠢的想法來做嗎哈哈
推 Clangpp: char *可以改用string就好了?? 這就不用擔心了?? 03/22 12:09
推 Clangpp: 不然就是用vector<char> 03/22 12:17
主要是因為丟進來的東西不一定真的是字串
也有可能是一整串硬體控制的指令
所以就沒有考慮string了
vector<char>的部分我再研究看看
謝謝你的意見!!
→ Caesar08: 我猜他可能只能用C 03/22 12:32
就只有介面的參數部分我是希望用不是C++的型別啦
所以只能捨棄掉很多好用的東西
推 CaptainH: 應該只能這樣 03/22 14:08
推 noodleT: 你的data 會不會有0x00的資料?有的話就只能用datalength 03/23 07:11
基本上會有
不過我蠻好奇如果沒有0x00的資料的話
有什麼其他的判斷方法嗎?
推 Clangpp: 有0x00的話喔 你還是用vector<byte>吧 為什麼一定要用cha 03/23 09:55
→ Clangpp: r呢?? 03/23 09:55
→ Clangpp: 然後建議你可以去看 effecitve STL有教你如何用vector跟 03/23 09:57
→ Clangpp: C的API來接 03/23 09:57
非常謝謝你的建議!!
至於為啥一定要用char...
因為送到硬體的資料我是用WriteFile
又是臨時學C++的
所以不知不覺還是用C的寫法在寫這些東西
不過現階段也不知道該怎麼做會比較好
我實際上是在開發JNI跟硬體之間溝通的API
JNI丟下來的資料型態是jstring
不過剛剛查了一下jstring也可以轉std::string
std::string也可以轉成char*讓我可以丟進去WriteFile
這樣看來用string是一個好主意
我再來研究一下如果要改成string該怎麼設計
也非常謝謝大家給的建議!!
推 Clangpp: 我看了一下 WriteFile的API沒有必要用char吧?? 03/23 22:02
實際上他是LPVOID的型別
不過因為我們用的硬體的關係
所以習慣都用char的陣列丟指令
推 EdisonX: 硬體收發資料實際上是用 unsigned char 較佳。 03/24 10:01
想請教一下使用char會有什麼疑慮嗎?
因為在Java的部分是沒有unsigned的
如果會有問題我可能要想辦法來測試一下...
推 firejox: 要不然你就自己封裝一個資料結構 讓使用者用這個來傳 03/24 23:06
例如使用struct然後在裡面放入必要的變數嗎?
推 noodleT: 有一些標準函式也會要求使用者輸入資料長度,或像 printf 03/26 23:09
→ noodleT: 他也是信賴你輸入的引數夠給 format 使用。看你是想採取 03/26 23:09
→ noodleT: 怎樣的設計 03/26 23:09
推 noodleT: 你的 data 有固定格式嗎?例如結尾固定是兩個0x00,0x00? 03/26 23:15
→ noodleT: 這樣的話就可以自己去掃陣列獲得長度。 03/26 23:15
→ noodleT: 題外話,你的引數 char *data 建議改成 const char *data 03/26 23:15
目前data沒有固定格式耶
不過應該也是能規定使用者最後要加上去?
引數的部分我會再更改一下的
謝謝你的建議~
推 Clangpp: 加const 是為了保護你傳進來的資料不會被變動 03/27 22:17
推 noodleT: const 也是讓使用者能夠信賴你不會去改我的值 03/27 23:22
謝謝兩位的建議
小弟我對這部分的著墨實在是不夠
還好有大家的幫助才能把這個東西做得更好!!
※ 編輯: petercoin (220.130.36.2), 03/28/2016 08:26:14