سؤال

أحتاج إلى تحويل السلاسل في بيثون إلى أنواع أخرى مثل INSENTED وموقع 8، 16 و 32، و 64 بت،، الزوجي، يطفو، والأسلحة.

كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

يمكنك تحويل سلسلة إلى عدد صحيح موقع 32 بت مع int وظيفة:

str = "1234"
i = int(str)  // i is a 32-bit integer

إذا كانت السلسلة لا تمثل عدد صحيح، فستحصل على ValueError استثناء. ملاحظة، ومع ذلك، إذا كانت السلسلة تمثل عددا صحيحا، ولكن هذا عدد صحيح لا يصلح إلى كثافة موقعة 32 بت، فستحصل بالفعل على كائن من النوع long في حين أن.

يمكنك بعد ذلك تحويلها إلى عرضات أخرى ووقيعها مع بعض الرياضيات البسيطة:

s8 = (i + 2**7) % 2**8 - 2**7      // convert to signed 8-bit
u8 = i % 2**8                      // convert to unsigned 8-bit
s16 = (i + 2**15) % 2**16 - 2**15  // convert to signed 16-bit
u16 = i % 2**16                    // convert to unsigned 16-bit
s32 = (i + 2**31) % 2**32 - 2**31  // convert to signed 32-bit
u32 = i % 2**32                    // convert to unsigned 32-bit
s64 = (i + 2**63) % 2**64 - 2**63  // convert to signed 64-bit
u64 = i % 2**64                    // convert to unsigned 64-bit

يمكنك تحويل السلاسل إلى النقطة العائمة مع float وظيفة:

f = float("3.14159")

يطفو بيثون ما تشير إليه اللغات الأخرى double, ، أي هم 64 بت. لا توجد عوامات 32 بت في بيثون.

نصائح أخرى

الأنواع التالية - بالنسبة للجزء الأكبر - لا توجد موجودة في Python في المقام الأول. في بيثون، يتم تحويل السلاسل إلى Ints أو سدود أو يطفو، لأن هذا كل شيء هناك.

أنت تطلب التحويلات التي ليست ذات صلة ببيثون في المقام الأول. إليك قائمة الأنواع التي طلبتها وما يعادلها بايثون.

  • غير موقعة وتوقيع 8 بت 8 بت إتجاه
  • غير موقعة وتوقيع 16 بت، إتجاه
  • غير موقعة وتوقيع 32 بت، غير موقعة: طويل, ، وقعت إتجاه
  • غير الموقعة وتوقيع 64 بت، طويل

  • مزدوج، يطفو

  • يطفو، يطفو
  • سلسلة، هذا هو ما كان عليك أن تبدأ به

لا أعرف ما هو ما يلي، لذلك لا أعرف ما يعادله الثعبان.

  • غير موقعة وتوقيع 8 بت،
  • غير موقعة وتوقيع 16 بت،
  • غير موقعة وتوقيع 32 بت،
  • غير موقعة وتوقيع 64 بت.

لديك بالفعل كل التحويلات التي: int(), long() و float().

بيثون لديه واحد فقط int اكتب. لتحويل سلسلة إلى int, ، استعمال int() مثله:

>>> str = '123'
>>> num = int(str)
>>> num
123

يحرر: أيضا لتحويل إلى تعويم، واستخدام float() بنفس الطريقة بالضبط.

لا أعتقد أن هذا يمكن الإجابة بالضرورة جيدا دون مزيد من المعلومات. كما قال آخرون، لا توجد سوى كثافة طويلة وطويلة للأعداد الصحيحة في بيثون - لا تلتزم اللغة بعرض البت والوقيبات المتوقعة لغات البرمجة ذات المستوى الأدنى.

إذا كنت تعمل تماما داخل بيثون، فربما تطرح السؤال الخطأ. هناك طريقة أفضل للقيام بما تحتاجه.

إذا كنت متداولا، على سبيل المثال، رمز C، أو عبر الشبكة، فهناك نكون طرق للقيام بذلك، ويبدو أن الإجابة على نشرتك السابقة مغطاة بأن الطريق بشكل جيد للغاية.

لدي الآن مشكلة حيث حصلت على قيمة مرت كرقم تكميل TWOS الموقد 16 بت من Modbus. كنت بحاجة لتحويل هذا إلى رقم موقد. انتهى بي الأمر بكتابة هذا، والذي يبدو أنه يعمل بشكل جيد.

# convert a 32 bit (prob) integer as though it was 
# a 16 bit 2's complement signed one
def conv_s16(i):
    if (i & 0x8000):
        s16 = -(((~i) & 0xFFFF) + 1)
    else:
        s16 = i
    return s16
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top