Haskell: Efficient way to bitwise cast String to Integer? -


स्ट्रिंग (या ByteString ) डालने का सबसे कारगर तरीका क्या है एक अभिन्न प्रकार bitwise पर, उदाहरण के लिए:

  smallEndianStringToInt32 :: ByteString - & gt; Int32 smallEndianStringToInt32 str = केस स्ट्रॉ [a, b, c, d] - & gt; बदलाव डी 24। बदलाव सी 16। ShiftL b 8। एक _ - & gt; 0 में  

हम इसे बस ऐसा कर सकते हैं, वास्तव में कम लागत:

  char * some_string = "...."; Int32_t x = * (int32_t *) some_string;  

लेकिन पूर्व कार्यान्वयन ( smallEndianStringToInt32 ) सी कोड के रूप में तेज़ी से नहीं दिखता है।

यह कैसे किया जा सकता है? (या यह वास्तव में तेजी से है?)

मुझे लगता है कि यह वही करता है जो आप चाहते हैं, लेकिन अन्य टिप्पणीकारों की तरह, मैं आपको यह स्पष्ट करने की अनुशंसा करता हूं कि आप ऐसा करने का प्रयास कर रहे हैं, क्योंकि यह बहुत ही गैर-मुहावरेदार हास्केल है:

  {- # LANGUAGE ओवरलोडेड स्ट्रिंग्स # -} आयात डेटा। बायट्रेडिंग.आंतरिक आयात विदेश। स्थिर आयात विदेश। विदेश आयात आयात विदेशी। आयात आयात करें डेटा। वर्ड (वर्ड 32) मुख्य :: आईओ () मुख्य = के साथ फॉरआईएनएपीटीटी एफटीपीटीआर $ \ पीटीआर - & gt; I & lt; - $ castPtr (ptr `plusPtr` off) मुद्रित करें (i :: वर्ड 32) जहां PS fptr off len =" ए \ 0 \ 0 \ 0 " 

के रूप में करना चाहिए दर्दनाक रूप से स्पष्ट हो, उदाहरण के लिए, इस कोड को segfaults के लिए बहुत अधिक संभावना है।


Comments