c++ - कैसे `सीरियल.प्रिंट()` 'पूर्ण "हेक्साडेसिमल बाइट्स?
hex arduino (3)
इसे इस्तेमाल करे:
//Converts the upper nibble of a binary value to a hexadecimal ASCII byte.
//For example, btohexa_high(0xAE) will return 'A'.
unsigned char btohexa_high(unsigned char b)
{
b >>= 4;
return (b>0x9u) ? b+'A'-10:b+'0';
}
//Converts the lower nibble of a binary value to a hexadecimal ASCII byte.
// For example, btohexa_low(0xAE) will return 'E'.
unsigned char btohexa_low(unsigned char b)
{
b &= 0x0F;
return (b>9u) ? b+'A'-10:b+'0';
}
और मुख्य कोड में:
comand_mod=0xA1; //example variable
Serial.print(btohexa_high(comand_mod));
Serial.print(btohexa_low(comand_mod));
मैं प्रोग्रामिंग कर रहा हूँ Arduino और मैं Serial.print()
करने की कोशिश कर रहा हूँ। Serial.print()
हेक्साडेसिमल प्रारूप " Serial.print()
रास्ता" में बाइट्स Serial.print()
(अधिक जानकारी के लिए पढ़ते रहें)
यही है, निम्न कोड का उपयोग करके
byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;
Serial.println(byte1, HEX);
Serial.println(byte2, HEX);
Serial.println(byte3, HEX);
मुझे सीरियल मॉनिटर में निम्न आउटपुट मिलता है:
A2
5
0
हालांकि मैं निम्नलिखित आउटपुट करना चाहूंगा:
A2
05
00
शब्दों में, मैं "पूर्ण" हेक्साडेसिमल मान को प्रिंट करना चाहूंगा जिसमें 0
एस ( 05
बजाय 0
और 00
बजाय 00
)।
मैं यह कैसे कर सकता हूं?
सरल जानवर बल विधि, के रूप में एक नियमित रूप से लिखना है:
void p(char X) {
if (X < 16) {Serial.print("0");}
Serial.println(X, HEX);
}
और मुख्य कोड में:
p(byte1); // etc.
बफर में प्रिंट करने के लिए स्प्रंटफ़ का उपयोग करें (दो बाइट प्रति बाइट + नल टर्मिनेटर):
byte byte1 = 0xA2;
byte byte2 = 0x05;
byte byte3 = 0x00;
char s[7];
sprintf(s, "%02x\n%02x\n%02x", byte1, byte2, byte3);
Serial.println(s);
नई लाइन पर प्रत्येक को प्राप्त करने के बीच में नई लाइनें जोड़े '% 02x' के बारे में,% का अर्थ है कि स्वरूपण की जानकारी है, 0 से 0 के साथ पैड के लिए 0 का मतलब है, 2 का अर्थ है पैड इनपुट 2 वर्णों तक और x का अर्थ है मुझे हेक्साडेसिमल जैसा दें।
अन्य फ़ॉर्मेटिंग विकल्पों के लिए http://linux.die.net/man/3/sprintf देखें