这个可行吗?我想将它转换为char*,以便稍后检索这些值。
当然:
int array[4] = {1, 2, 3, 4};
char* c = reinterpret_cast<char*>(array);
c
到c + sizeof(array)
。您可以对任何POD类型执行此操作。// assuming c above
int (&pArray)[4] = *reinterpret_cast<int(*)[4]>(c);
std::string
),因此您需要编写序列化函数来转换它们的数据为字节流,并编写反序列化函数将其转换回去。
我特别喜欢 Boost 的做法,如果可以的话,我会使用他们的序列化库。他们首先定义了用于序列化基本类型的例程,然后你可以通过构建来序列化更复杂的类型。当然,Boost 还有他们的ASIO库可以为你处理套接字。
是的,但你可能不应该这样做。
这样做将把整数视为字节序列。然后将这些字节传递给文件或跨套接字进行写入非常诱人。问题在于结果将不具备可移植性。无法保证读取这些字节的任何计算机将以相同的方式解释它们。最大的问题是大端和小端。某些计算机首先放置最重要的字节,而其他计算机则首先放置最不重要的字节。在它们之间切换将导致数字被反向读取。
你可以使用 C 风格,但在 C++ 中:
int arr[] = {0, 1, 2, 3, 4};
char* p_arr = reinterpret_cast<char*>(arr);
std::string
而不是char*
。如果你需要序列化,使用<stringstream>
。#include <stringstream>
std::ostringstream packet_os;
for ( int i = 0; i < 5; ++ i ) packet_os << arr[ i ] << " ";
network_send( packet_os.str().c_str() ); // c_str() returns char*
在另一端:
network_receive( recv_buf );
std::istringstream packet_is( recv_buf->bytes );
for ( int i = 0; i < 5; ++ i ) packet_is >> arr[ i ];
assert ( packet_is ); // for debugging, check that everything was received OK
int list[5] = {1,2,3,4,5};
char * pChar = (char *)list;
char*
或将数字转换为某些字符串。 - Georg Fritzsche