gpt4 book ai didi

c - 如何将一个 5 字节的十六进制数转换为 10 进制数并用 C 类型字符串表示?

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:13 25 4
gpt4 key购买 nike

我有一个由 5 个字节组成的十六进制数:0xEEDDCCBBAA。这个数字存储在一个数组中:[0xEE 0xDD, 0xCC, 0xBB, 0xAA]。我想将它转换为 10base 十进制数并将其表示为 C 类型字符串:“1025923398570”。 (0xEEDDCCBBAA 等于 1,025,923,398,570)

一个问题是我的系统只支持最大。 32 位类型的变量,所以我不能用一个变量来存储这个数字或执行任何类型的大于 32 位的操作。例如我不能这样做:

unsigned long long val = 0xeeddccbbaa;
unsigned char buf[50];
sprintf(buf, "%d", val);

非常感谢。

编辑:因为我的问题看起来很困惑,所以我重新写了一遍。

最佳答案

可以创建一个通用例程来处理任何大小的字节数组。

#include <string.h>

char *convert_10base_decimal_number(char *dest, size_t dsize, unsigned char *a,
size_t asize) {

if (dsize == 0)
return NULL;
char *d = dest + dsize - 1;
*d = '\0';
size_t ai = 0;
do {
// mod 10
unsigned carry = 0;
for (size_t i = ai; i < asize; i++) {
carry = carry * 256 + a[i];
a[i] = carry / 10;
carry %= 10;
}
if (d == dest)
return NULL;
d--;
*d = carry + '0';
if (a[ai] == 0)
ai++;
} while (ai < asize);
memmove(dest, d, dsize - (d - dest));
return (dest);
}

int main(void) {
unsigned char a[] = { 0xEE, 0xDD, 0xCC, 0xBB, 0xAA };
char buf[50];

puts(convert_10base_decimal_number(buf, sizeof buf, a, sizeof a));
// 1025923398570

return 0;
}

此方法确实使用数组 a

关于c - 如何将一个 5 字节的十六进制数转换为 10 进制数并用 C 类型字符串表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com