将2个ascii字符存储到C中的1个整数中

将2个ascii字符存储到C中的1个整数中,c,string,ascii,C,String,Ascii,我目前正在从事一个项目,涉及用于显示的ascii命令字符串。我的程序中有一个字符串(由单独的函数定义的命令字符串),我需要将其分解并存储到数组中。我需要在数组的每个元素中存储2个ascii字符。这是我的问题,设备正在寻找十六进制的ascii码,我的硬件将把变量存储为十进制ascii码。因此,如果我想将字符“B”和“A”发送到第一个元素,那么显示器将看到4241个十六进制字符,它将是16961个十进制字符,而不是6665个。如果有人有任何建议,我将非常感兴趣。谢谢您可以使用移位和按位或将两个字符组

我目前正在从事一个项目,涉及用于显示的ascii命令字符串。我的程序中有一个字符串(由单独的函数定义的命令字符串),我需要将其分解并存储到数组中。我需要在数组的每个元素中存储2个ascii字符。这是我的问题,设备正在寻找十六进制的ascii码,我的硬件将把变量存储为十进制ascii码。因此,如果我想将字符“B”和“A”发送到第一个元素,那么显示器将看到4241个十六进制字符,它将是16961个十进制字符,而不是6665个。如果有人有任何建议,我将非常感兴趣。谢谢

您可以使用移位和按位或将两个
字符组合在一起:

char ch1 = 'A', ch2 = 'B';
uint16_t buff = ch2 << 8 | ch1;  // buff = 0x4241 = 16961
charch1='A',ch2='B';

uint16\u t buff=ch2这个问题没有很好的定义。你有没有试过的代码?也很难理解十六进制的确切含义,您是指ascii十六进制字符串吗?或者它们存储在二进制中,可以用十六进制表示吗?Paul R帮我解决了这个问题。我需要生成一个ascii十六进制字符串,但我一直在生成一个ascii十进制字符串,这不起作用。保罗建议改变角色的位置。我今天早上试过了,效果很好(greatA)一对括号可能会让不知道炉边的操作符优先级的人看得更清楚;)@答:通常我会,但我内心的强迫症患者自己喜欢这样一个事实:
ch2
排成一列@user3735658:由于整数提升规则,它实际上是可以的,所以不需要在这个实例中强制转换(尽管它不会造成任何伤害)。通常,当您使用比
int
更宽的类型时,您只需要对逐位操作进行强制转换。感谢您的澄清,我学到了一些新的东西。Paul R,我甚至没有考虑过移位!谢谢,这个很好用。如果我不是这个网站的新手,我会投你一票。
uint16_t buff = (ch2 << 8) | ch1;  // buff = 0x4241 = 16961