2012-09-08 18 views
7

मेरे पास दो हेक्साडेसिमल तार हैं। मुझे उनके बीच XOR ऑपरेशन करने की आवश्यकता है।दो हेक्सा तारों के बीच एक्सओआर ऑपरेशन कैसे करें?

मेरे हेक्सा तार की तरह,

a = "1A6F2D31567C80644A5BEF2D50B986B"; 
b = "EF737F481FC7CDAE7C8B40837C80644"; 

कैसे उन दोनों के बीच XOR आपरेशन करना है? क्या आप ऐसा करने के लिए कुछ दिशानिर्देश दे सकते हैं?

+0

आउटपुट एक पूर्णांक या दूसरी स्ट्रिंग है? – tokland

उत्तर

12

कि किसी भी आधार के लिए काम करेगा:

>> (a.to_i(16)^b.to_i(16)).to_s(16) 
=> "f51c527949bb4dca36d0afae2c39e2f" 

लेकिन आप हेक्साडेसिमल स्ट्रिंग्स के लिए String#hex उपयोग कर सकते हैं।

9
a = "1A6F2D31567C80644A5BEF2D50B986B" 
b = "EF737F481FC7CDAE7C8B40837C80644" 
a.hex^b.hex 
#or (a.hex^b.hex).to_s(16) 
1

आप विशेष रूप से नहीं पूछा, लेकिन आप उत्पादन स्ट्रिंग गद्दी अग्रणी शून्य द्वारा इनपुट स्ट्रिंग्स रूप में एक ही लंबाई होने के लिए चाहते हो सकता है। तो, स्टीन्सलैग के स्लिम उत्तर पर निर्माण (और संभावित समस्या को दर्शाने के लिए इनपुट मानों को समायोजित करना):

a = "14ef" 
b = "1ca3" 
(a.hex^b.hex).to_s(16) 
# "84c" 
(a.hex^b.hex).to_s(16).rjust(a.length, '0') 
# "084c" 
संबंधित मुद्दे