Đầ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 0x30
thà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;
}
}
}