【发布时间】:2010-02-07 07:15:02
【问题描述】:
好的,我已经编写了一些代码来反转十六进制字符,作为我编造的有趣练习的一部分。
这是我目前拥有的:
#include <stdio.h>
int main() {
char a,b,c;
while (1) {
c = getchar();
if (!feof(stdin)) {
a = c % 16;
b = (c - a) / 16;
c = (a*16) + b;
putchar(c);
}else{break;}
}
return 0;
}
它适用于大多数值。比如 0xA0 变成 0x0A 等等……
但是,它不适用于以“F”开头的值。
0xF1 变成 0x10
0xFF 变为 0xF0
等等……
有人能指出我正确的方向吗?
【问题讨论】:
-
你需要一些空间来让你的数学工作。对 a 和 b 使用 int 而不是 char。或者切换到使用按位运算(>>
-
@KennyTM:你的意思可能是
putchar(cc>>4|(cc&0xf)<<4); -
附加说明:在除以 16 之前,无需从
c中减去a。b = c / 16将得到完全相同的结果。这就是 C 中整数除法的工作原理。