के साथ सी सरणी क्रमपरिवर्तन सी में मैक्रो के साथ एक सरणी का विशिष्ट क्रमपरिवर्तन उत्पन्न करना संभव है?मैक्रोज़
यानी मैं तत्वों के साथ एक सरणी एक्स हों:
0 1 2 3 4 5
x = ["0","1","1","0","1","0"]
मैं सोच रहा था कुछ इस तरह के लिए कुछ मैक्रो foo भी हो सकते हैं:
#define S_2Permute(x) = [x[5], x[3], x[4], x[2], x[1]]
जहाँ मैं सरणी के आदेश को फिर से परिभाषित है, तो मूल स्थिति 5 में तत्व स्थिति 0.
कोई भी विचार में है?
उदाहरण का उपयोग
मैं डेस एन्क्रिप्शन एल्गोरिथ्म के एक कार्यान्वयन बनाने के लिए शुरू कर रहा हूँ। डीईएस के लिए कई क्रमपरिवर्तन/विस्तार की आवश्यकता होती है जहां मुझे सरणी में सभी तत्वों को पुन: क्रमबद्ध करना होगा, कभी-कभी सरणी को कम करना होगा और कभी-कभी इसका विस्तार करना होगा। मैं उम्मीद कर रहा था कि मेरे लिए सरणी को अनुमति देने के लिए बस एक मैक्रो को परिभाषित करने में सक्षम हो।
EDIT2
खैर डेस में पहला कदम कुछ है प्रारंभिक क्रमचय कहा जाता है।
ABCDEF
जो करने के लिए फैलता है:
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
आईपी (प्रारंभिक क्रमचय) तो यह स्ट्रिंग दूसरे स्थान पर रखना होगा तो शुरू में मैं कुछ 64-बिट कुंजी है, जो इस उदाहरण के लिए 0-15 हेक्स किया जा सकता है कि सरणी में प्रत्येक तत्व एक नई स्थिति में होगा:
IP =
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
तो bitstring में नए 1st तत्व मूल bitstring से 58 वें तत्व (बिट) होगा।
तो मैं इन बिट्स पात्रों में से एक सरणी में संग्रहीत के सभी के लिए होता है:
x = [0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,
1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1]
और फिर बस फोन
IP_PERMUTE(x);
और मैक्रो जादू नई में बिट्स के सभी स्थानांतरित कर दिया जाएगा सही पदों।
मुझे यकीन नहीं है कि मुझे यह मिल गया है। क्या आप इसका उदाहरण दे सकते हैं कि आप इसका उपयोग कैसे करना चाहते हैं? –
@GregHewgill यकीन है, मैंने जोड़ा है कि मैं इसके लिए क्या उम्मीद करूँगा। –
मैं एक कोड उदाहरण के बारे में सोच रहा था। आपका कोड कैसा * बिल्कुल * होगा, और मैक्रो किस भाग को प्रतिस्थापित करेगा? –