-2

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

到目前为止,我无法这样做。

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

整数值 = 11234567890123456789112345678911;

4

3 回答 3

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

将结果字节转换为十六进制字符串(如果这是您想要的)应该是微不足道的。

于 2013-03-21T20:24:09.000 回答
0

除了其他问题(其他人已经指出,所以我不会重复),如果您确实需要交换字节顺序 - 假设您正在做一些跨平台的事情(或者在另一个例子中使用音频样本格式),这很重要为此,Core Foundation 提供了一些功能,例如CFSwapInt32HostToBig().

有关这些功能的更多信息,请查看Byte-Order Utilities Reference页面,您可能会找到所需的内容。

于 2013-03-21T20:03:14.947 回答
0

回答:你不能。这个数字需要一个 128 位的整数。

于 2013-03-21T19:56:08.750 回答