C语言 unsigned short 如何相互转 signed char

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 unsigned short 如何相互转 signed char相关的知识,希望对你有一定的参考价值。

最近在做android音频项目,涉及到C语言

因为某个方法中生成的数据是unsigned short数组

然后要把数据传递给java层,然后java通过socket把数据传给另一台手机B,在传送过程时候是byte[](相当于C中的signed char[])

手机B把数据传进C层调用某个函数,但是这个函数接收的是unsigned short数组

问题来了
C/C++中
unsigned short 如何相互转 signed char

请写出两个方法 相互转换 谢谢.

#include <stdio.h>
int main()

char ca;
unsigned char ucb;
unsigned short usc;

ca = 128;
ucb =128;

usc = ca + ucb;
printf("%d\n", usc);
usc = ca + (short)ucb;
printf("%d\n", usc);

usc = (unsigned char)ca + ucb;
printf("%d\n", usc);

usc = ca + (char)ucb;
printf("%d\n", usc);
getchar();
return EXIT_SUCCESS;

结果是:0, 0, 256, 65280.
这道题最难得部分,莫过于你是否理解c语言中的数据类型转换 。
有个名词“Inerger Promotion"(整型提升):在算术类型中有这么一种转换,有符号或无符号的char型,short型和Bit-field在做算术运算之前,首先要做整型提升,然后才能参与运算。(其它的一些类型之间的转换,可以参考任何一本c语言书)追问

大哥,我看不懂,请直接写两个函数相互转换可以么

参考技术A

用指针比较好做

unsigned short *usp;
char *scp;
unsigned short us_array[3] = 0x1234, 0x1234, 0x1234;
char sc_array[4] = 'a', 'b', 'c', 'd';

usp = (unsigned short *)sc_array;
scp = (char *)us_array;

怎样把unsigned short 转换为 unsigned char

char 和short 是一样的,都是1个字节,至于无符号的话,char不存在这个问题。
两者可以直接替换使用,没有问题。如果编译器有警告,则static_cast<unsigned short>(charVal),这样转化即可
参考技术A unsigned short s;
unsigned char c;
1.直接赋值
c=s;
2.强制转换
c=(unsigned char)s;
3.C++建议用法
c = static_cast<unsigned char>(s);

//short一般占两个字节
char占一个字节本回答被提问者和网友采纳
参考技术B unsigned short 转换为 unsigned char可以这样转:
unsigned short * word;
int size= WideCharToMultiByte(CP_ACP,0,word,-1, NULL, 0, NULL,0);
char * AsciiBuff =new char[size];
WideCharToMultiByte(CP_ACP,0,word,-1,AsciiBuff,size, NULL, 0);

以上是关于C语言 unsigned short 如何相互转 signed char的主要内容,如果未能解决你的问题,请参考以下文章

c语言中怎么把不同类型转化成同一类型?

C语言 请问signed char,unsigned char,short,unsigned sh

C语言基础unsigned short类型用于循环的一个难点

C语言基础unsigned short类型用于循环的一个难点

转:VC中WORD,DWORD,unsigned long,unsigned short的区别(转)

C++11 中没有“stoshort, unsigned short”函数吗? [关闭]