我定义了一个string类型的字符串,里面含有数字和其他字符,请问各位大虾,如何将这个字符串转化成二进制流,多谢,在线等!!!
10 个解决方案
#1
把字符串里面的字符一个一个读取出来 然后转换成2进制
#2
楼主什么意思,无论字符还是数字,内存里存的都是些2进制的bits。
转化什么呀?楼主想转成什么样?
转化什么呀?楼主想转成什么样?
#3
难道是 要输出 0,1 数字?
Step 1: string 转化成 CStrig
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
Step2 :用strMfc.format("%b",strMfc);
不知道有没有%b,试试吧
Step 1: string 转化成 CStrig
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
Step2 :用strMfc.format("%b",strMfc);
不知道有没有%b,试试吧
#4
string->utf8->string
#5
string s("test1");
ofstream on("test.out",ios::out|ios::binary);
on.write(s.c_str(),s.size());
这样?
ofstream on("test.out",ios::out|ios::binary);
on.write(s.c_str(),s.size());
这样?
#6
string里面的数据本身就是二进制流呀,二进制流是相对于对象或结构来说的吧~
比如说一个类A
struct A
{
char *p;
int x;
unsigned char c1;
unsigned char c2;
}
A a;
这个类的实例如果想存储或在网络上传输,则需要转换成二进制流,
因为存在指针p,以及网络各主机字节序的问题,因此不可能直接把地址&a,长度为sizeof(A)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。
比如说一个类A
struct A
{
char *p;
int x;
unsigned char c1;
unsigned char c2;
}
A a;
这个类的实例如果想存储或在网络上传输,则需要转换成二进制流,
因为存在指针p,以及网络各主机字节序的问题,因此不可能直接把地址&a,长度为sizeof(A)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。
#7
二进制,没试过。帮顶。
#8
谢谢各位大虾的帮助,我要把字符串转化成二进制流,用于tcp传输,而且不能用.net frame所提供的框架库,各位再给点意见吧,多谢了,明天接分!
#9
//我想要用到bitset操作把
#include <bitset>
using namespace std;
const int SIZE=1024; //每次最多转换的二进制位数
int main()
{
char *p="Hello world!";//要传输的字符串
bitset<SIZE> bitvec; //存储的二进制流
int index=0; //最终有多少二进制位
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i];
}
}
#10
当然存储二进制的容器类型为std::bitset<1024>如果你不需要这种类型可以很方便的转换为其他类型.
如操作:
string xx=bitvec.to_string(); //转换为字符串
unsigned long yy=bitvec.to_ulong();//转换为unsigned long型
换有很多.
int main()
{
..
..
..
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i]; //本来想有copy()做的但发现setbit不提供begin(),end()
//所以写的很蹩脚!高手赐教!
}
}
如操作:
string xx=bitvec.to_string(); //转换为字符串
unsigned long yy=bitvec.to_ulong();//转换为unsigned long型
换有很多.
int main()
{
..
..
..
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i]; //本来想有copy()做的但发现setbit不提供begin(),end()
//所以写的很蹩脚!高手赐教!
}
}
#1
把字符串里面的字符一个一个读取出来 然后转换成2进制
#2
楼主什么意思,无论字符还是数字,内存里存的都是些2进制的bits。
转化什么呀?楼主想转成什么样?
转化什么呀?楼主想转成什么样?
#3
难道是 要输出 0,1 数字?
Step 1: string 转化成 CStrig
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
Step2 :用strMfc.format("%b",strMfc);
不知道有没有%b,试试吧
Step 1: string 转化成 CStrig
CString strMfc;
std::string strStl=“test“;
strMfc=strStl.c_str();
Step2 :用strMfc.format("%b",strMfc);
不知道有没有%b,试试吧
#4
string->utf8->string
#5
string s("test1");
ofstream on("test.out",ios::out|ios::binary);
on.write(s.c_str(),s.size());
这样?
ofstream on("test.out",ios::out|ios::binary);
on.write(s.c_str(),s.size());
这样?
#6
string里面的数据本身就是二进制流呀,二进制流是相对于对象或结构来说的吧~
比如说一个类A
struct A
{
char *p;
int x;
unsigned char c1;
unsigned char c2;
}
A a;
这个类的实例如果想存储或在网络上传输,则需要转换成二进制流,
因为存在指针p,以及网络各主机字节序的问题,因此不可能直接把地址&a,长度为sizeof(A)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。
比如说一个类A
struct A
{
char *p;
int x;
unsigned char c1;
unsigned char c2;
}
A a;
这个类的实例如果想存储或在网络上传输,则需要转换成二进制流,
因为存在指针p,以及网络各主机字节序的问题,因此不可能直接把地址&a,长度为sizeof(A)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。
#7
二进制,没试过。帮顶。
#8
谢谢各位大虾的帮助,我要把字符串转化成二进制流,用于tcp传输,而且不能用.net frame所提供的框架库,各位再给点意见吧,多谢了,明天接分!
#9
//我想要用到bitset操作把
#include <bitset>
using namespace std;
const int SIZE=1024; //每次最多转换的二进制位数
int main()
{
char *p="Hello world!";//要传输的字符串
bitset<SIZE> bitvec; //存储的二进制流
int index=0; //最终有多少二进制位
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i];
}
}
#10
当然存储二进制的容器类型为std::bitset<1024>如果你不需要这种类型可以很方便的转换为其他类型.
如操作:
string xx=bitvec.to_string(); //转换为字符串
unsigned long yy=bitvec.to_ulong();//转换为unsigned long型
换有很多.
int main()
{
..
..
..
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i]; //本来想有copy()做的但发现setbit不提供begin(),end()
//所以写的很蹩脚!高手赐教!
}
}
如操作:
string xx=bitvec.to_string(); //转换为字符串
unsigned long yy=bitvec.to_ulong();//转换为unsigned long型
换有很多.
int main()
{
..
..
..
for(int ix=0;p[ix]!=0;ix++)
{
bitset<8> temp(static_cast<unsigned long>(p[ix]));
for(int i=0;i<8;i++) bitvec[index++]=temp[i]; //本来想有copy()做的但发现setbit不提供begin(),end()
//所以写的很蹩脚!高手赐教!
}
}