我在iOS中遇到了一些麻烦。我一直在尝试将 base10 十进制值转换为little endian十六进制字符串。
到目前为止,我无法这样做。
例如,我想将以下整数转换为小端十六进制:
整数值 = 11234567890123456789112345678911;
我在iOS中遇到了一些麻烦。我一直在尝试将 base10 十进制值转换为little endian十六进制字符串。
到目前为止,我无法这样做。
例如,我想将以下整数转换为小端十六进制:
整数值 = 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
将结果字节转换为十六进制字符串(如果这是您想要的)应该是微不足道的。
除了其他问题(其他人已经指出,所以我不会重复),如果您确实需要交换字节顺序 - 假设您正在做一些跨平台的事情(或者在另一个例子中使用音频样本格式),这很重要为此,Core Foundation 提供了一些功能,例如CFSwapInt32HostToBig()
.
有关这些功能的更多信息,请查看Byte-Order Utilities Reference页面,您可能会找到所需的内容。
回答:你不能。这个数字需要一个 128 位的整数。