我的字节数组中有第一个字符的地址,它的大小是: const char * rawImageBytes,int size
我想将内容复制到不同的字节数组。然后稍微修改那个。 这是我现在正在做的事情:
LOGI("FrameReceived will reach here 1");
modifiedRawImageBytes = rawImageBytes;
jint sizeWH = width * height;
jint quarter = sizeWH/4;
jint v0 = sizeWH + quarter;
for (int u = sizeWH, v = v0, o = sizeWH; u < v0; u++, v++, o += 2) {
modifiedRawImageBytes[o] = rawImageBytes[v]; // For NV21, V first
modifiedRawImageBytes[o + 1] = rawImageBytes[u]; // For NV21, U second
}
但我没有得到正确的颜色,好像我会用Java而不是c ++。
我假设发生这种情况,因为我只是做modifiedRawImageBytes = rawImageBytes;
而不是实际复制整个字节数组,因此它可以从另一个地址指针开始在内存中。
有点初学者用c,所以我迷失了,有人能帮我理解做错了什么吗?
PS:我假设,因为即使我发送rawImageBytes而不是modifiedRawImageBytes,它仍然会被修改
答案 0 :(得分:2)
这是因为const char *
是一个指针。这意味着它代表一个地址。所以你猜对了,新变量代表了相同的数据。
为避免这种情况,您应该创建一个副本。
char modifiedRawImageBytes[size];
//if the pointer come from function's param don't redeclare it ;)
std::memcpy(modifiedRawImageBytes, rawImageBytes, size*sizeof(char));
此代码将分配一个新的char
数组,然后memcpy
将复制到新数组中的先前数组数据中。
请注意,您需要加入cstdio