2014-02-19 82 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