我正面临一个问题:
今天我要声明300个字节并用不同的数据初始化它们
例如:
unsigned short memory[] = {
0xFFFF, 0xFFFF, "X6", "M1", 1, 150 , 6, .....
}
我想这样做,因为我希望我的数据在内存上初始化为: X和6的值在相同的2字节上。如果我做'X','6'我会: 0x0058和0x0006而不是0x5806 ..
你能点亮我的想法吗? 我是实时开发的先驱。Thanx适合你的时代。
Naqued
答案 0 :(得分:2)
"X6"
是一个由3个字节组成的字符串。我不知道你的编译器用它做什么(抱怨?)。
要创建包含字符的无符号短初始值设定项,请使用'XX'
,这样会生成0x5858
。要使用非字符的半字节值,可以在字符常量中包含转义值。
'X\x06'
会给你0x5806
。注意第二个字节如何在字符常量中使用十六进制转义字符,写为反斜杠(转义开始),后跟'x'(后面的数字的基数),后跟字节值06.取决于您的架构,您可能需要将其写为'\x06X'
。
答案 1 :(得分:0)
如果我理解正确,你想要声明一个2字节的项目数组,但是逐字节地初始化一些元素。
如果您想按照示例语法执行此操作,则可以使用二进制操作:
'X' << 8 | 6
这里以char'X'的二进制值开始,将其偏移8位,从而占据2字节无符号short的最左边字节。然后你在正确的字节上用你想要的二进制OR来插入它。
所以在你的情况下,它将是:
unsigned short memory[] = {
0xFFFF, 0xFFFF, 'X' << 8 | 6, 'M' << 8 | 1, 1, 150 , 6, .....
}
答案 2 :(得分:0)
感谢您的所有责任。
我找到了另一种方法:
{ 0xFFFF, 0xFFFF, (('X' << 8) + '6') }
这里我在左边8位偏移X,只需添加&#39; 6&#39; carac by +。
它也做正确的事情。 我现在更好地理解工作字节偏移的方式。
感谢所有