如何使用按位运算符将 32 位十进制转换为 C 中的十六进制?
how to use bitwise operators to covert 32 bit decimal to hexadecimal in c?
我应该编写一个将 32 位十进制转换为十六进制的函数。但是我的函数一直输出零而不是正确的十六进制。我不知道我做错了什么。下面是我的函数的代码。
输入:66
输出应该是什么:42
我的代码输出:0
uint32_t packed_bcd(uint32_t value) {
uint32_t ones = 15;
uint32_t mask = (ones >> 28);
uint32_t numbers[8];
numbers[0] = value & mask;
for(int i = 1; i <= 7; i++) {
uint32_t mask_temp = (mask << (4 * i));
numbers[i] = mask_temp & value;
}
for(int i = 7; i >= 0; i--) {
numbers[i] = numbers[i] * pow(10, i);
}
int sum = 0;
for(int i = 0; i < 8; i++) {
sum = sum + numbers[i];
}
return sum;
}
BCD 不是十六进制或普通二进制。
uint32_t bcdtobin(uint32_t bcd)
{
uint32_t result = 0;
uint32_t mask = 1;
while(bcd)
{
result += (bcd & 0x0f) * mask;
bcd >>= 4;
mask *= 10;
}
return result;
}
uint32_t bintobcd(uint32_t bin)
{
uint32_t result = 0;
size_t remaining = 32;
if(bin <= 99999999)
{
while(bin)
{
result >>= 4;
result |= (bin % 10) << 28;
bin /= 10;
remaining -= 4;
}
result >>= remaining;
}
return result;
}
使用您的示例编号:
int main(void)
{
printf("%d\n", bintobcd(42));
printf("%d\n", bcdtobin(66));
}
我应该编写一个将 32 位十进制转换为十六进制的函数。但是我的函数一直输出零而不是正确的十六进制。我不知道我做错了什么。下面是我的函数的代码。
输入:66
输出应该是什么:42
我的代码输出:0
uint32_t packed_bcd(uint32_t value) {
uint32_t ones = 15;
uint32_t mask = (ones >> 28);
uint32_t numbers[8];
numbers[0] = value & mask;
for(int i = 1; i <= 7; i++) {
uint32_t mask_temp = (mask << (4 * i));
numbers[i] = mask_temp & value;
}
for(int i = 7; i >= 0; i--) {
numbers[i] = numbers[i] * pow(10, i);
}
int sum = 0;
for(int i = 0; i < 8; i++) {
sum = sum + numbers[i];
}
return sum;
}
BCD 不是十六进制或普通二进制。
uint32_t bcdtobin(uint32_t bcd)
{
uint32_t result = 0;
uint32_t mask = 1;
while(bcd)
{
result += (bcd & 0x0f) * mask;
bcd >>= 4;
mask *= 10;
}
return result;
}
uint32_t bintobcd(uint32_t bin)
{
uint32_t result = 0;
size_t remaining = 32;
if(bin <= 99999999)
{
while(bin)
{
result >>= 4;
result |= (bin % 10) << 28;
bin /= 10;
remaining -= 4;
}
result >>= remaining;
}
return result;
}
使用您的示例编号:
int main(void)
{
printf("%d\n", bintobcd(42));
printf("%d\n", bcdtobin(66));
}