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