如何将长长字符串转换为二进制字符串
How to convert a long long to a binary character string?
如何将long long
转换为与二进制值匹配的char
数组?我正在开发一个程序,其中通过网络发送二进制字符串来控制照明系统。我现在设置它的方式是我有一个接收std::string
的函数,然后将其发送给客户端。我真的想保留这种架构(std::string
很容易来回传递)?
编辑:我正在寻找long long
类型的二进制序列化作为字节数组。
如果您不介意使用原始字符数组,您可以简单地选择:
char c[sizeof (long long)];
memcpy(c, &longlongValue, sizeof (long long));
编辑:
甚至:
char c[sizeof (long long)];
*(long long*)c = longlongValue;
这可能比调用Memcpy更快。
我同意这不是漂亮的 c++ 或 c。
您可能会考虑的一件事是网络上的客户端和服务器可能具有不同的字节序。
互联网协议将大端定义为标准网络字节 用于数据包标头中所有数值的顺序和许多 设计用于 高原油Berkeley 套接字 API 定义了一组要转换的函数 进出网络的 16 位和 32 位整数字节顺序:HTS (主机到网络短路)和 htonl(主机到网络长)功能 将 16 位和 32 位值分别从计算机(主机)转换为 网络秩序;NTOHS 和 NTOHL 函数从网络转换为 主机顺序。这些函数在大端系统上可能是无操作的。
网络字节顺序,即大端序。 没有标准的库调用来将long long
与网络字节顺序相互转换。 下面是一些模板,可用于按网络字节顺序序列化和反序列化任何整型类型std::string
。 现场演示在这里。
序列化
template< typename T >
string serialize( T val ) {
string str( sizeof(T), 0 );
for(size_t i=0; i<sizeof(T); ++i, val >>= 8)
str[sizeof(T)-i-1] = char(val);
return str;
}
反序列化
template< typename T >
T deserialize( const string & data ) {
T val = 0;
for(unsigned char u : data) val = (val << 8) | u;
return val;
}
并像这样使用它
long long val = 201501210654;
std::string str = serialize(val);
assert( val == deserialize<long long>( str ) );
相关文章:
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何从二进制文件中读取字符串
- 二进制数之和(使用C样式字符串)
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 查找"n"二进制字符串中最长公共子字符串的长度
- 递归二进制搜索与字符串数组
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 将位字符串转储到二进制文件的最佳方法是什么
- 如何排列二进制字符串以最小化它们之间的距离
- 字符串的递归二进制搜索-C++
- 如何检查二进制文件中是否存在字符串
- 将二进制字符串/文件内容从 c++ 传递到节点 js
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- C++ 如何以二进制格式表示字符串?
- 将大型二进制字符串写入二进制文件
- 字符串二进制组合学
- 如何使用 tolua++ 将 lua 字符串(二进制)传递给 c++
- 将Matlab生成的字符串二进制转换为浮点
- C++ - 将字符串二进制链转换为整数二进制链
- 将字符串(二进制)转换为整数