一、oc和c++的混编;const
char
* to
NSString
object c1 --------> c++ ----------> object c2;
1.object c1
object c1
NSString *s =@"ABC";
const char* destDir = [s UTF8String];
2、C++两种转换方法:
c++:
第一种:建议
char* tempParam3 = (char *)pParam2;
//tempParam3 output ABC
//如果 char tempParam3 = *(char *)pParam2;
// tempParam3 output A
第二种:
std::string tempChar2 = *(string *)pParam2;
//tempChar2.c_str() output ABC
3、object c2
object c2
如果C++文件是第一种:
NSString *tempstring = [NSString stringWithUTF8String:tempParam3.c_str()];
如果C++文件是第二种:
NSString *tempstring =[NSString stringWithUTF8String:tempChar2];
参考:https://blog.csdn.net/mango9126/article/details/70834209
https://www.cnblogs.com/tomblogblog/p/3719254.html
char tempChar = *(char *)pParam2;//只输出第一个字节A
char *tempChar = (char *)pParam2;//输出全部ABC
eg:
double d = 3.1416;
char ch = *(char *)&d;
cout<<ch<<endl;
char ch = *(char *)&d
1 double一般是8字节(32位和64位操作系统)
2 char是1个字节。
解释char ch = *(char *)&d;
1 &d : 就是取d的内存地址。换句话说是指向8个字节的类型指针。
2 (char *)&d,将该地址由double*转换为char*,指针类型转换为指向一个字节的类型指针。
3 *(char *)&d。取该指针(char*)的值,其实换句话说是取一个字节的内存数据,并赋予数据指针类型的类型。
4 char ch = *(char *)&d。就简单了。
总结:就是取double数d的第一个字节,并转换为char类型,赋值给ch。
https://blog.csdn.net/u010977122/article/details/53097113
[root@db-172-16-3-33 zzz]# cat b.c
#include <stdio.h>
int main() {
char * a = "hello";
fprintf(stdout, "&a:%p, a:%p, a:%s\n", &a, a, a);
return 0;
}
结果 :
[root@db-172-16-3-33 zzz]# gcc -O3 -Wall -Wextra -Werror -g ./b.c -o b && ./b
&a:0x7fff71b22230, a:0x400618, a:hello
&a 表示a的地址 .
a 表示a存储的内容, 因为a是指针, 所以它的内容读取出来就是一个地址 .
*a 表示a指针存储的这个地址 存储的内容 .