在这篇文章中,我们将为您详细介绍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
- 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转换问题全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
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++
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++混编基础)
字符串的是连接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[]互转 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
本文标签: