在C中,我很好奇如何取一个unsigned char(长度为两位数)并且能够将第一个数字存储到不同的unsigned char中,将第二个数字存储到另一个unsigned char中。
答案 0 :(得分:1)
假设您正在说十进制数字,您可以这样做:
unsigned char v = 42;
unsigned char tens = v / 10;
unsigned char ones = v % 10;
十个丢弃的整数除法;获得该除法的剩余部分,其余数字为10分。
答案 1 :(得分:1)
这取决于数字的含义。
如果你在谈论十进制数字,你需要做的是重复除以10(十进制数的基数)并得到余数以提取每个数字。如果只有2位数字,则可以通过除以10来提取第一个数字,第二个数字可以通过除以10的剩余部分来提取。
如果您正在谈论十六进制数字,您可以执行与上面相同的操作,但使用16的基数。或者,您可以利用一个字节由两个4位nybbles组成的事实,每个可以用一个十六进制数字表示。因此,高4位构成第一位,低4位构成第二位。
以下是显示两种方法的示例:
#include <stdio.h>
void hex_digits(void)
{
unsigned char uc = 0xAB;
unsigned char nyb_hi = uc >> 4;
unsigned char nyb_lo = uc & 0xF;
printf("High nybble: 0x%X, low: 0x%X\n", nyb_hi, nyb_lo);
}
void decimal_digits(void)
{
unsigned char uc = 12;
unsigned char d1 = uc / 10;
unsigned char d2 = uc % 10;
printf("First digit: %u, second: %u\n", d1, d2);
}
int main(void)
{
hex_digits();
decimal_digits();
return 0;
}