gpt4 book ai didi

在 C 中从 unsigned 转换为 signed char

转载 作者:太空狗 更新时间:2023-10-29 15:52:47 25 4
gpt4 key购买 nike

我正在使用 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是吗?

最佳答案

unsigned char * 转换为 char *(反之亦然)的唯一问题是它应该是一个错误。用铸件修复它。

display((char *) buff, len);

注意:这个转换是不必要的:

printf("char = %c", (char) i);

这很好:

printf("char = %c", i);

%c 格式化程序以 int arg 开头,因为不可能将 char 传递给 printf( ) 无论如何(它总是会被转换为 int,或者在极不可能的情况下,unsigned int。)

关于在 C 中从 unsigned 转换为 signed char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com