gpt4 book ai didi

c - 如何将 char 数组中的 base10 十进制(大端)转换为二进制(小端的十六进制)

转载 作者:行者123 更新时间:2023-11-30 20:27:55 24 4
gpt4 key购买 nike

我在 iOS 中遇到了一些问题。我一直在尝试将 base10 十进制值转换为 little endian十六进制 字符串。

到目前为止我还无法做到这一点。

例如,我想将以下整数转换为小尾数十六进制:

int val = 11234567890123456789112345678911;

最佳答案

你可以这样做:

#include <stdio.h>
#include <string.h>

void MulBytesBy10(unsigned char* buf, size_t cnt)
{
unsigned carry = 0;
while (cnt--)
{
carry += 10 * *buf;
*buf++ = carry & 0xFF;
carry >>= 8;
}
}

void AddDigitToBytes(unsigned char* buf, size_t cnt, unsigned char digit)
{
unsigned carry = digit;
while (cnt-- && carry)
{
carry += *buf;
*buf++ = carry & 0xFF;
carry >>= 8;
}
}

void DecimalIntegerStringToBytes(unsigned char* buf, size_t cnt, const char* str)
{
memset(buf, 0, cnt);

while (*str != '\0')
{
MulBytesBy10(buf, cnt);
AddDigitToBytes(buf, cnt, *str++ - '0');
}
}

void PrintBytesHex(const unsigned char* buf, size_t cnt)
{
size_t i;
for (i = 0; i < cnt; i++)
printf("%02X", buf[cnt - 1 - i]);
}

int main(void)
{
unsigned char buf[16];

DecimalIntegerStringToBytes(buf, sizeof buf, "11234567890123456789112345678911");

PrintBytesHex(buf, sizeof buf); puts("");

return 0;
}

输出(ideone):

0000008DCCD8BFC66318148CD6ED543F

将结果字节转换为十六进制字符串(如果这是您想要的)应该很简单。

关于c - 如何将 char 数组中的 base10 十进制(大端)转换为二进制(小端的十六进制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556572/

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