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