Đầu vào từ PC là một ký tự, tức là giá trị ASCII. Để hiểu cách thức này được lưu, hãy xem bảng ASCII . Các số '0' đến '9' được biểu thị bằng mã ASCII 0x30thành 0x39. Các chữ in hoa 'A' đến 'Z' được đại diện bởi 0x41đến 0x5A, và các chữ cái nhỏ 'a' đến 'z' bởi 0x61đến 0x7A.
Tất nhiên bạn có thể sử dụng một chức năng như sscanf, như được đề xuất bởi @ JohnO'M. Các chức năng như vậy ( printf,, scanf...) có nhiều tính năng nhưng do đó đòi hỏi rất nhiều năng lượng và bộ nhớ [Cần dẫn nguồn] , mà chúng ta thường không muốn chi cho vi điều khiển. Một cách khác đơn giản là phân biệt 3 trường hợp có thể (0-9 hoặc AF hoặc af) và trừ số chính xác khỏi mã ASCII để đi đến kết quả:
if( (s >= 0x30) && (s <= 0x39)) { // 0-9
x = s - 0x30;
}
else {
if( (s >= 0x41) && (s <= 0x46)) { // A-F
x = s - 0x37;
}
else {
if( (s >= 0x61) && (s <= 0x66)) { // a-f
x = s - 0x57;
}
else { // wrong input
x = 0xFF;
}
}
}