
const uint8_t* 和 uint8_t* 如何互相转化??
1 MidLinn PRO const_cast ? |
4 fyyz 2019 年 6 月 4 日 如果是 uint8_t 的指针或者引用就要用 const_cast,如果不是指针或者引用,拷贝赋值给新的变量就行了 |
5 rain423 OP 函数声明 void onCallback(uint8_t* data, int len); 调用处 onCallback(const_cast<uint8_t*>(ov.userData),ov.userDataLen); |
7 rain423 OP @MidLinn errorInfo:error: invalid conversion from 'const uint8_t* {aka const unsigned char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive] |
8 tairan2006 2019 年 6 月 4 日 一般需要把 const 取消,都是设计有问题… |
9 ysc3839 2019 年 6 月 4 日 via Android 你应该去掉 const,而不是强制转换类型然后写入。 |
10 jorneyr 2019 年 6 月 4 日 reinterpret_cast |
11 v2byy 2019 年 6 月 4 日 const_cast 是用来去 const,不是加 const 的 |
12 across 2019 年 6 月 4 日 这个为啥会报错啊? GCC 设置特殊参数了? |
13 testeststs 2019 年 6 月 4 日 const uint8_t* c_var; uint8_t* var; c_var = var; var = const_cast<uint8_t*>(c_var); |
14 sightchen 2019 年 6 月 4 日 可以改函数声明吗? ov.userData 类型是 const uint8_t*常量指针,不希望通过指针来更改指向的内容,那把它传递给 onCallback 时,onCallback 的第一个参数设计为 const uint8_t*比较合理,这样在函数里面就不能通过指针修改指针指向的内容了,只能使用不能更改。 |
15 rain423 OP @sightchen 可以改,onCallback 的第一个参数改为 const uint8_t*,没问题。但是后面在 jni 层调用 java 层的 static 方法时出现问题了。。JNIEnv *env = getJNIEnv(); jbyte* buff = (jbyte*)data; jbyteArray jarray = env->NewByteArray(len); env->SetByteArrayRegion(jarray, 0, len, buff); env->CallStaticIntMethod(mClass, fields.onCallbackListener, jarray); |
17 rain423 OP @jorneyr error: reinterpret_cast from type 'const uint8_t* {aka const unsigned char*}' to type 'uint8_t* {aka unsigned char*}' casts away qualifiers |
18 ipwx 2019 年 6 月 4 日 一般把 const * 改成 * 都会有你意想不到的隐患,比如对象内部状态不统一。因为类的设计者认为这个接口不会造成数据变更。 正确方法:联系你调用的类的作者,改代码。 不要说什么业务需要调用底层接口不好改代码,各种 BUG 都是这种思想造成的。 |
19 MidLinn PRO |
20 sightchen 2019 年 6 月 4 日 |
21 GeminiPro 2019 年 6 月 4 日 如果强行转,reinterpret_cast 可以做到,但是这么转都是不合理的设计造成的,总有一天会爆发隐患。 |