GVKun编程网logo

delphi pchar char byte string转换问题(delphi 字符串转byte)

15

在这篇文章中,我们将为您详细介绍delphipcharcharbytestring转换问题的内容,并且讨论关于delphi字符串转byte的相关问题。此外,我们还会涉及一些关于byte[]数组转换St

在这篇文章中,我们将为您详细介绍delphi pchar char byte string转换问题的内容,并且讨论关于delphi 字符串转byte的相关问题。此外,我们还会涉及一些关于byte[]数组转换String和char[]转换String、C#string以string转char*和以byte[]转char*传入C++、char * ,char,string与NSString转化(objec-c与c++混编基础)、char 与 string 互转 byte与string互转 list与string[]互转 char与byte互转的知识,以帮助您更全面地了解这个主题。

本文目录一览:

delphi pchar char byte string转换问题(delphi 字符串转byte)

delphi pchar char byte string转换问题(delphi 字符串转byte)

总结

以上是小编为你收集整理的delphi pchar char byte string转换问题全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

byte[]数组转换String和char[]转换String

byte[]数组转换String和char[]转换String

问题是出在使用rocketmq的时候,生产者产生消息,放在消息体,String.getBytes[],

然后在消费者使用, String.valueOf(Bytes[])d得到的是地址。

后来查看valueOf源码:

1 public static String valueOf(Object obj) {
2     return (obj == null) ? "null" : obj.toString();
3 }

 

查看String.valueOf(char[])

源码:

public static String valueOf(char data[]) {
        return new String(data);
    }

所以返回字符串的值

 

如果是null对象返回字符串“null"

否则调用obj.toString

 

他的源码:

1 public String toString() {
2     return getClass().getName() + "@" + Integer.toHexString(hashCode());
3 }

 

C#string以string转char*和以byte[]转char*传入C++

C#string以string转char*和以byte[]转char*传入C++

public static extern void editstring2(IntPtr ptr);
        [DllImport("dllfordebugdemo.dll", EntryPoint = "ansiunicode", CallingConvention = CallingConvention.Cdecl)]
        public static extern void ansiunicode(string ptr);
        [DllImport("dllfordebugdemo.dll", EntryPoint = "ansiunicode", CallingConvention = CallingConvention.Cdecl)]
        public static extern void ansiunicode2(byte[] ptr);
//上面是同一相C++中函数,只不过在C#中被映射到不同的函数而已
string msg2 = "张三zsw";
            ansiunicode(msg2);
            Console.WriteLine("张三zsw的utf8字节长度=" + Encoding.UTF8.GetBytes(msg2).Length);
            byte[] bs = Encoding.UTF8.GetBytes(msg2);
            foreach (byte b in bs)
                Console.Write(b + " ");
            Console.WriteLine("转换成byte[]之后");
            ansiunicode2(Encoding.UTF8.GetBytes(msg2));
void ansiunicode(char* ptr)
{
	wchar_t* pc = (wchar_t*)ptr;
	int index = 0;
	int len = _tcslen((wchar_t*)ptr);

	int ansilen = strlen(ptr);
	cout << "wchar len=" << len << " ansi len=" << ansilen << endl;

}

wchar len=4 ansi len=7
张三zsw的utf8字节长度=9
229 188 160 228 184 137 122 115 119 转换成byte[]之后
wchar len=5 ansi len=9

本实验的现象:同一个c#字符串"张三zsw",直接以string-->char*转入c++,wcharlen=4而ansilen=7,而在C#中先转成byte[],再以byte[]-->char*,wcharlen=5,andilen=9。通过我们人眼可看到确实是有5个“字符”,通过转换出来的byte可知有9个(229 188 160对应字符''张'',228 184 137对应字符''三'',

122 115 119分别对应z s w,那这么可以知道将string转成byte[]之后传入c++才是正确的(这么说只能说是因为在C++中将字符串当作宽字符来处理是错误的,如果用 mbsrtowcs (见使用例子)(还有一个例子)将多字节unicode转换成宽字符,则应该与转成byte[]之后再计算字符数的结果是一样的).。

总结:

在c#中将字符串传给C++,如果C++中只是用wchar_t或其指针进行处理,那么最好在c#中将字符串转成byte[]。

char * ,char,string与NSString转化(objec-c与c++混编基础)

char * ,char,string与NSString转化(objec-c与c++混编基础)

字符串的是连接object-c和c++的最重要元素,学好字符串的处理,就等于学好了oc和c++的混编


char * /const char *Nsstring之间的转化


//char * /const char * Nsstring

Nsstring * strPath = [Nsstring stringWithUTF8String:filename];


//Nsstringchar * /const char * 

const char * filePathChar = [filePath UTF8String];

////////////////////////////////////////////////华丽的分割线//////////////////////////////////////////////////////////////////////////

转化char 到nsstring

char myChar = 'a'; Nsstring * string = [Nsstring stringWithFormat:@"%c", myChar];
提取Nsstring的某个字段到char

- (unichar)characteratIndex:(NSUInteger)index;


////////////////////////////////// ////////////// 华丽的分割线//////////////////////////////////////////////////////////////////////////


c++ 和 oc的本身是不能直接对接的。要通过c的api做连接的。

string 转 Nsstring

string str = [aNsstring UTF8String];


Nsstring 转 string

string str("testStr");

Nsstring * aString = [Nsstring stringWithUTF8String:str.c_str()];

char 与 string 互转 byte与string互转 list<string>与string[]互转 char与byte互转

char 与 string 互转 byte与string互转 list与string[]互转 char与byte互转

class Program
    {
        static void Main(string[] args)
        {           
          
                 

            //string类型到数组 char[]数组
            string str1 = "123";
            string str2 = "abc";
            string str3 = "表示表示";
            char[] ch1= str1.ToCharArray();
            char[] ch2 = str2.ToCharArray();
            char[] ch3 = str3.ToCharArray();
            //char[]数组到string类型
            foreach(var x in ch3)
                Console.WriteLine(x);//表 示 表 示
            char[]ca1=new char[]{''1'',''表'',''中''};
            string cs = new string(ca1);
            Console.WriteLine(cs);//1表中

            //string类型到数组 byte[]数组
            byte[] by1 = Encoding.UTF8.GetBytes(str1);
            byte[] by2 = Encoding.UTF8.GetBytes(str2);
            byte[] by3 = Encoding.UTF8.GetBytes(str3);
            foreach(var xx in by3)
                Console.Write(xx + " ");//232 161 168 231 164 186 232 161 168 231 164 186 utf-8中字符占3字节

            // byte[]数组到string类型
            byte[] ba1 = new byte[] { 11,22,33};
           // string bs = new string(ba1);//编译报错 无byte数组构造函数
            string bs = Encoding.Default.GetString(ba1);//系统默认编码
            Console.WriteLine(bs);//输出 ..!  byte->ascll码的char->string


            //char和byte   char占两字节 可存汉字  byte为一字节 在C#中大小为[1,255]之中 否则编译报错
            char c1=''表'';
           // byte b1 = "1";//编译出错
           // byte b2 = -1;//编译出错
            byte b3 = 0;
            byte b4 = 255;
          //  byte b5 = 256;//编译出错
            Console.WriteLine("\n"+b4);//255
            Console.WriteLine("\n" + c1);//表

            //char 和  byte转换时 char->byte会转成数字 byte->char会转成ascll字符 下面的结果是在 日文系统下的输出结果 怎么算的未知 先搁着
            char c2 = (char)b4;
            Console.WriteLine(c2);//c2=255输出 y
            byte b6 = (byte)c1;
            Console.WriteLine(b6);//104

            //string 数组到list<string>
            string[]sa1=new string[]{"aaa","bbb","333"};
            List<string> ls1 = new List<string>(sa1);
            Console.WriteLine(ls1.Count);//结果为 3

            //list<string>到 数组string
            List<string> ls2 = new List<string>();
            ls2.AddRange(new string[]{"123","234","345"});
            string[] sa2 = ls2.ToArray();
            Console.WriteLine(sa2.Length);//结果为 3


            Console.Read();
        }

    }

补充: string str = "1234";
            char[]cs= str.ToArray();//将str看成一个char的集合 类似List<string>ls=new List<string>{new string{"123","abc","vvv"}}; ls.toArray()
            foreach (var item in cs)
            {
                Console.Write(item);//1,2,3,4,
                
            }
            string cv = "11223344567";
            string[] nstr= cv.Split(str.ToArray());
            Console.WriteLine("new array length:" + nstr.Length);//9 【1】【2】【3】【4】【1】【2】【3】【4】【567】
            foreach (var items in nstr)
            {
                Console.Write(items);//输出567
                
            }
            Console.Read();

今天关于delphi pchar char byte string转换问题delphi 字符串转byte的介绍到此结束,谢谢您的阅读,有关byte[]数组转换String和char[]转换String、C#string以string转char*和以byte[]转char*传入C++、char * ,char,string与NSString转化(objec-c与c++混编基础)、char 与 string 互转 byte与string互转 list与string[]互转 char与byte互转等更多相关知识的信息可以在本站进行查询。

本文标签: