需要把Byte*指针转换成string,Byte*是变长度的,最长1024Byte.

解决方案 »

  1.   

    前提是知道编码.不然没法保证所有的都可以转换回来.
    IMAP 协议的文字编码就很变态.
      

  2.   

    这个只能转换Byte数组,不能转换Byte*指针,编译的时候通不过.
      

  3.   

    byte *b;
    IntPtr p = (IntPtr)b;
    Marshal.PtrToStringXXX(p,xxxx)
      

  4.   

    xxxx是可以指定一个长度。
    PtrToStringXXX 指PtrToStringAnsi,PtrToStringAuto,PtrToStringBSTR 等等
      

  5.   

    Byte*里面是16进制数,应该用哪个?我还是只需要16进制数.string里面要是16进制数
      

  6.   

    主要是看什么编码的,ansi啦、unicode啦,你试试哪个转换后不是乱码就用哪个
      

  7.   

    ANSI应该是对的.但是打印输出的时候,显示的不是16进制数,而是解码以后的数了.我必须还要对这个string要做解码处理的.
      

  8.   

    你要解码呀,解码不用转成字符串,直接解就是了,一个字节就是一个byte数据,四个字节就是一个int32数据。
    还可以这样:*(b+1),下一个字节;*((int*)b+1),下一个整数,Marshal.PtrToStringAnsi((IntPtr)(b+10),20),从第十个字节取20个字节转换成字符串
      

  9.   

    谢谢你热情回复.我的意思是,比如BYTE* b = {00,12,13,ac}我要在转化成string后,输出显示的还是00,12,13,ac现在输出的都是ANSI字符了.
      

  10.   


    用for语句,读去到数组中,再ToString()?这样是不是效率比较低?我有大量数据包要处理.
      

  11.   

    那你先得用Marshal.Copy把数据复制到byte[],再用BitConverter.ToString()转换后去掉-了