C / Real Time使用不同类型的数据初始化内存

时间:2017-05-15 14:42:53

标签: c arrays memory hex real-time

我正面临一个问题:

今天我要声明300个字节并用不同的数据初始化它们

例如:

unsigned short memory[] = { 

0xFFFF, 0xFFFF, "X6", "M1", 1, 150 , 6, .....

}

我想这样做,因为我希望我的数据在内存上初始化为: X和6的值在相同的2字节上。如果我做'X','6'我会: 0x0058和0x0006而不是0x5806 ..

你能点亮我的想法吗? 我是实时开发的先驱。

Thanx适合你的时代。

Naqued

3 个答案:

答案 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 +。

它也做正确的事情。 我现在更好地理解工作字节偏移的方式。

感谢所有