【发布时间】:2013-01-22 16:52:22
【问题描述】:
我正在使用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 chars 的数组转换为chars?
【问题讨论】:
标签: c casting char unsigned-char