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

如何在char数组中将base10十进制(大端)转换为二进制(小端的十六进制),c,hex,decimal,endianness,C,Hex,Decimal,Endianness,我在iOS上遇到了一些麻烦。 我一直在尝试将base10十进制值转换为一个小的十六进制字符串 到目前为止,我无法做到这一点 例如,我想将以下整数转换为little endian十六进制: int val=11234567890123456789112345678911 回答:你不能。这个数字需要一个128位整数。除了其他问题(其他人已经指出了这一点,所以我不再重复),如果您确实需要交换endianness,那么可以说您正在跨平台(或者在另一个示例中使用音频采样格式)做一些重要的事情,核心基础提供

我在iOS上遇到了一些麻烦。 我一直在尝试将base10十进制值转换为一个小的十六进制字符串

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

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

int val=11234567890123456789112345678911


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

除了其他问题(其他人已经指出了这一点,所以我不再重复),如果您确实需要交换endianness,那么可以说您正在跨平台(或者在另一个示例中使用音频采样格式)做一些重要的事情,核心基础提供了一些功能,如<代码> CFSWAPTIN 32主机()/代码> < /P>
有关这些函数的更多信息,请查看页面,您可以找到您要查找的内容。

您可以这样做:

#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;
}

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

该值不适合整数。(有符号32位整数或无符号32位整数)它也没有基或端。这只是一个值。嗯。。。我在python中找到了与我想要的类似的东西,尽管我不知道如何将其转换为C或目标C:>>>>n=int(“11234567890123456789112345678911”,10)>>>out=[]>>对于范围(32)内的I:。。。out.append(n&0xff)。。。n>>=8…>>>''。join([chr(x)代表x-in-out]).encode('hex')除了其他问题,OP实际上需要得到int值的一个小的十六进制字符串表示形式。
0000008DCCD8BFC66318148CD6ED543F