سؤال

ال struct الوحدة مفيدة عندما تحاول تحويل البيانات من وإلى التنسيقات الثنائية.ومع ذلك، فقد عثرت مؤخرًا على مواصفات تنسيق الملف الذي يستخدم تنسيق النقطة العائمة Binary16.لقد بحثت في وثائق بايثون، لكن لم أجد أي شيء يمكنه التحويل منها وإليها.ما هي أفضل طريقة لتحويل هذه البيانات من/إلى عوامات بايثون؟

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

المحلول

يمكنك القيام بذلك تقريبًا كما تفعل في لغة C - على سبيل المثال، أعتقد، تقريبًا مثل هذا...:

def tofloat(b16):
  sign = -1 if b16 & 0x8000 else +1
  expo = ( b16 & 0x7C00 ) >> 10
  prec = b16 & 0x03FF
  if expo == 0:
    return sign * (2.0 ** -24) * prec
  elif expo == 0x1F:
    return sign * float('inf')
  prec |= 0x0400
  return sign * (2.0 ** (expo - 25)) * prec

نصائح أخرى

هذا الرجل بلوق وظيفة يعطي تنفيذا في كل من وبيثون.انه يستخدم struct الوحدة النمطية، ثم فك تشفيرها يدويًا.ليس كل ما هو معقد التحويل.

ظهر بحث سريع على Google http://packages.python.org/bigfloat/ والتي تقول أن لديها سياق للتلاعب binary16 أرقام النقطة العائمة.أنا لست على دراية بالحزمة بنفسي، لذلك لا أستطيع أن أخبرك بأي شيء عن كيفية استخدامها (على الأقل، لا شيء أكثر مما يمكنك قراءته بنفسك في الوثائق).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top