如何将整数转换为char数组

时间:2011-06-08 09:16:06

标签: c++

int x = 1231212;
memcpy(pDVal, &x, 4);
int iDSize = sizeof(double);
int i = 0;
for (; i<iDSize; i++)
{
    char c;
    memcpy(&c, &(pDVal[i]), 1);
    printf("%d|\n", c);
    printf("%x|\n", c);

}

我使用上面的代码段来打印整数的每个字节的十六进制值。但这不正常。这是什么问题?

5 个答案:

答案 0 :(得分:1)

尝试这样的事情:

void Int32ToUInt8Arr( int32 val, uint8 *pBytes )
{
  pBytes[0] = (uint8)val;
  pBytes[1] = (uint8)(val >> 8);
  pBytes[2] = (uint8)(val >> 16);
  pBytes[3] = (uint8)(val >> 24);
}

或者也许:

UInt32 arg = 18;
array<Byte>^byteArray = BitConverter::GetBytes( arg);
// {0x12, 0x00, 0x00, 0x00 }

byteArray->Reverse(byteArray);
// { 0x00, 0x00, 0x00, 0x12 }

对于第二个示例,请参阅:http://msdn2.microsoft.com/en-us/library/de8fssa4(VS.80).aspx

希望这有帮助。

答案 1 :(得分:0)

只需使用sprintf功能即可。你会得到一个char *,所以你有你的阵列。 请参阅网页上的示例

答案 2 :(得分:0)

您的代码看起来很糟糕。就是这样。

memcpy(pDVal, &x, 4);

什么是pDVal?你为什么用4?是sizeof(int)吗?

int iDSize = sizeof(double);

为什么sizeof(double)?可能你需要sizeof(int)

memcpy(&c, &(pDVal[i]), 1);复制第i个数组pDVal元素的第一个字节。

printf("%d|\n", c);无效,因为“%d”正在等待整数。

答案 3 :(得分:0)

像这样打印:

printf("%d|\n", c & 0xff);
printf("%x|\n", c & 0xff);

答案 4 :(得分:0)

如果您认真对待,我建议这样做。

#include <sstream>

template <typename Int>
std::string intToStr(Int const i) {
  std::stringstream stream;
  stream << std::hex << i;
  return stream.str();
}

您可以调用intToStr(1231212)。如果您坚持要获得char数组(我强烈建议您使用std::string),则可以复制c_str()结果:

std::string const str = intToStr(1231212);
char* const chrs = new char[str.length()+1];
strcpy(chrs,str.c_str()); // needs <string.h>