我正在使用
lame
将输入的raw pcm
流转换为mp3
。该库中的编码函数以unsigned char
类型的数组返回mp3
编码样本。现在需要将这个mp3编码流放入一个flv
容器中,该容器使用一个将编码样本写入char
数组的函数。我的问题是,我正在将来自lame
的数组(类型为unsigned char
)传递到flv
库中。以下代码片段(仅为符号)说明了我的问题:/* cast from unsigned char to char. */
#include <stdio.h>
#include <stdlib.h>
void display(char *buff, int len) {
int i = 0;
for(i = 0; i < len; i++) {
printf("buff[%d] = %c\n", i, buff[i]);
}
}
int main() {
int len = 10;
unsigned char* buff = (unsigned char*) malloc(len * sizeof(unsigned char));
int i = 0;
for(i = 65; i < (len + 65); i++) {
buff[i] = (unsigned char) i;
printf("char = %c", (char) i);
}
printf("Displaying array in main.\n");
for(i = 0; i < len; i++) {
printf("buff[%d] = %u\n", i, 'buff[i]');
}
printf("Displaying array in func.\n");
display(buff, len);
return 0;
}
我的问题如下:
1. 在下面的代码中(通过将buff
传递给函数display
来演示),隐式类型转换是否安全?是否有可能发生一些奇怪的行为?
2. 鉴于我别无选择,只能使用现有的函数,有没有一种“安全”的方法将unsigned char
数组转换为char
?
c&0xdf
有什么问题? - Rainald62