小弟请教一个问题,在C++中如何将string字符串转化成二进制流,多谢各位大虾

时间:2023-01-07 08:02:15
小弟请教一个问题,在C++中如何将string字符串转化成二进制流,多谢各位大虾

我定义了一个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,试试吧

#4


string->utf8->string

#5


string s("test1");
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)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。

#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()
                                                              //所以写的很蹩脚!高手赐教!
    }

}

#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,试试吧

#4


string->utf8->string

#5


string s("test1");
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)的内容直接写入文件或网络
才需要进行转换。
实现一个函数,根据变量情况添加一些附加信息,反正保证把内容写入后,其使用者能够正确解析并处理就可以了。

#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()
                                                              //所以写的很蹩脚!高手赐教!
    }

}