Robofun 機器人論壇

標題: 請問如何修正DecToBin函式? [打印本頁]

作者: pizg    時間: 2013-4-27 00:17
標題: 請問如何修正DecToBin函式?
這裡的DecToBin函式傳回值是 10011,正確應該傳回 1101 才對,
請問該如何修正?


  1. byte DecToBin(byte val)
  2. {
  3.   return ( (val/10*16) + (val%10) );
  4. }

  5. byte BinToDec(byte val)
  6. {
  7.   return ( (val/16*10) + (val%16) );
  8. }
  9. void setup() {
  10.   Serial.begin(9600);
  11.   byte i = DecToBin(13);
  12.   Serial.println(i, BIN);  // return 10011
  13.   i = BinToDec(B1101);
  14.   Serial.println(i);  // return 13
  15. }

  16. void loop() {}
複製代碼

作者: coopermaa    時間: 2013-4-27 17:00
這兩行:

  1. byte i = DecToBin(13);
  2. Serial.println(i, BIN);  // return 10011
複製代碼

為什麼不這樣寫就好?

byte i = 13;
Serial.println(i, BIN);


另外, DecToBin 也不對,因為 DecToBin(13) 得到的結果是  (13/10*16) + (13%10)  = 19
作者: vegewell    時間: 2013-4-29 20:50
回復 1# pizg


    return ( (val/10*16) + (val%10) );改為

return ( (val/10*16) - (val%10) );
作者: pizg    時間: 2013-4-29 23:05
本帖最後由 pizg 於 2013-4-30 00:07 編輯

感謝 coopermaa 和 vegewell 兩位老師.vegewell 這次改對了,
13/10*16 - 13%10 真的會等於 13
這個式子好神奇唷!!
不過若代入大於16的數就會出錯,
例如代入25,
25/10*16 - 25%10 = 28,
哈~~這是哪門子的BinToDec?
另一個DecToBin也是錯的.
底下式子可作個比較:
  1. byte DecToBin(byte val)
  2. {
  3.   return ( (val/10*16) - (val%10) );
  4. }

  5. byte BinToDec(byte val)
  6. {
  7.   return ( (val/2*10) + (val%2) );
  8. }
  9. void setup() {
  10.   Serial.begin(9600);
  11.   // 這是錯的
  12.   byte i = DecToBin(25);
  13.   Serial.println(i, BIN);
  14.   i = BinToDec(B11101);
  15.   Serial.println(i);
  16.     // 這是對的
  17.   String j = String(25, BIN);
  18.   Serial.println(j);
  19.   j = String(B11001, DEC);
  20.   Serial.println(j);
  21. }

  22. void loop() {}
複製代碼

作者: pizg    時間: 2013-4-29 23:34
這兩行:


為什麼不這樣寫就好?

byte i = 13;
Serial.println(i, BIN);


另外, DecToBin 也不 ...
coopermaa 發表於 2013-4-27 17:00
有請cooper老師出馬,
可否幫忙解決這個問題 >> http://www.robofun.net/forum/viewthread.php?tid=8090&extra=page%3D1




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2