2014-02-19 121 views
0

我有一个字符指针,需要使用此指针在内存中存储2个字节值。 试过这个使用字符指针存储整数

*dataConfigured = configuredParameterCount; 
*++dataConfigured = configuredParameterCount << 8; 

除此之外还有更好的代码吗?

+0

使用联合? – Geoffroy

+2

'dataConfigured'和'configuredParameterCount'的类型是什么 – MOHAMED

+1

“更好的代码”可能意味着更快,消耗更少的RAM内存,消耗更少的程序内存,更安全,更可读,更易于维护......另外,我们不知道是什么类型变量是。你的问题需要澄清,否则任何人都不能回答(他们会尽力而为,即使他们不能,当然......)。 – Lundin

回答

0

假设​​类型是short(2个字节),你可以简单地做到这一点

*((short*)dataConfigured) = configuredParameter; 

但请务必注意通过dataConfigured指出缓冲区有足够的空间。

正如@Calvin指出的那样,这可能会导致某些计算机体系结构出现问题(尽管它可以用于最常见的x86架构和x64架构)。但是,如果你想要在所有架构memcpy是更安全的赌注(更慢但更安全)。

+0

除此之外,这不一定更快。如果OP使用8位CPU,该怎么办?考虑到特定的系统,你无法真正优化代码。 – Lundin

+0

这有可能违反对齐至关重要的架构(例如SPARC或定制MCU/SoC)。确实gcc有这样的警告。 –

+0

@Calvin我同意,现在我越想到它,OP代码似乎更好的选择。 – Ammar

4

假设:

char dataConfigured[2]; 
uint16_t configuredParameterCount = 4711; 

你可以这样做:

memcpy(dataConfigured, &configuredParameterCount, sizeof(dataConfigured)); 
0

,如果你有

char* dataConfigured = ..; 
short data = 123; 

你可以做

*((short*)dataConfigured) = data; 

要小心 - 你需要确保有足够的内存保留。

+0

除此之外,这不一定更快。如果OP使用8位CPU,该怎么办?考虑到特定的系统,你无法真正优化代码。 – Lundin

+0

超级工作正常:) – Sijith

+0

@Lundin:正如你在你对这个问题的评论中所述,目前还不清楚什么更好。由于过早优化不好,我不会认为“更好”意味着“更快”。首先,正确和可读的代码通常是“最好的”,如果它没有违反性能等其他约束。从这个意义上说,我相信这个答案是“更好的”。 – Philipp