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