6
A
回答
1
最简单可行的方法 - 用sprintf(或snprintf的,如果你有的话):
unsigned char a[SOMESIZE]
int n = 1234;
sprintf(a, "%d", n);
或者,如果你想让它存储在二进制:
unsigned char a[sizeof(int) ];
int n = 1234;
memcpy(a, & n, sizeof(int));
0
警告:未经测试的代码。
这应该是一个排序不可知的转换。它从低到高。可能有更有效的方法来做到这一点,但目前我想不起来。
#include <limits.h> // CHAR_BIT, UCHAR_MAX
int num = 68465; // insert number here
unsigned char bytes[sizeof(int)];
for (int i=0; i<sizeof(int); i++)
{
bytes[i] = num & UCHAR_MAX;
num >>= CHAR_BIT;
}
我发布这个主要是因为我没有看到另一个解决方案,其中结果不会改变,取决于你的处理器是什么endianness。
+0
但是也许用户希望它们改变 - 以保持与原始int相同的字节顺序。此外,您的数组大小和循环控制计算是错误的。 – 2010-08-10 10:38:48
7
或者,如果你知道你在做什么:
int n = 12345;
char* a = (char*)&n;
0
我理解这个问题作为一个数转换为字符串表示(如尼尔一样)。
下面是一个不使用lib的简单方法。
int i = 0;
int j = 0;
do {a[i++] = '0'+n%10; n/=10;} while (n);
a[i--] = 0;
for (j<i; j++,i--) {int tmp = a[i]; a[i] = a[j]; a[j] = tmp;}
的问题可能需要一些澄清,别人显然明白你就想为int的内部表示所使用的基础字节(但如果你想要做的事情,你最好使用定义的一些固定大小类型而不是int,否则你将无法确定字节数组的长度)。
1
这可能是工作
int n=1234;
const int arrayLength=sizeof(int);
unsigned char *bytePtr=(unsigned char*)&n;
for(int i=0;i<arrayLength;i++)
{
printf("[%X]",bytePtr[i]);
}
采取的依赖于字节序
相关问题
- 1. 将字节数组转换为int
- 2. PHP将字节数组转换为int
- 3. 将int转换为字节数组BufferOverflowException
- 4. 将字节数组转换为C中的Int-likes#
- 5. 将字节数组转换为xamarin pcl c中的int#
- 6. C++将int转换为字符数组?
- 7. 将字节数组转换为int数组中的错误#
- 8. 将int数组转换为Golang中的字节数组
- 9. 将C#字节数组转换为C++
- 10. 转换字节数组INT
- 11. 将字节[]转换为int
- 12. 将C#字节数组转换为VB.NET
- 13. C:将字节数组转换为struct
- 14. INT转换为一个字节数组
- 15. int转换为BCD字节数组
- 16. int转换为BCD字节数组
- 17. 转换字节数组为一个int数组在C
- 18. 将NSData转换为base64encoded并将字节数组转换为C#
- 19. 将int转换为java中的字节
- 20. 如何将字节数组转换为int数组?
- 21. 在C中将字符串数组转换为Int数组#
- 22. 如何将struct数组转换为c#中的字节数组?
- 23. 如何将字节数组转换为C#中的双数组?
- 24. int转换为4字节字符数组(C)
- 25. 在SSAS中将字节转换为Int
- 26. C#转换字节数组为int总是相同数量
- 27. C#将字节字符串转换为字节数组
- 28. Java - 将int转换为4字节的Byte数组?
- 29. 将int转换为不同大小的字节数组
- 30. 将int转换为两个字节的数组
警告井井有条:'memcpy'会产生不可预知的行为,如果你不考虑字节序。 – Zarel 2010-08-10 10:11:56
@Zarel结果将完全可预测,但可能不需要。 – 2010-08-10 10:13:00
“不可预知”,因为除非您知道运行它的处理器的字节序,否则您将无法预测结果。 – Zarel 2010-08-10 10:17:44