تحويل صفائف البايت إلى أعداد صحيحة موقعة وعائمة في Go
في Go، توفر الحزمة الثنائية وظائف لتحويل الأعداد الصحيحة غير الموقعة من [] بايت المصفوفات، مثل ثنائي.LittleEndian.Uint16() وbinary.BigEndian.Uint32(). ومع ذلك، لا توجد معادلات مباشرة للأعداد الصحيحة الموقعة أو الأعداد العشرية.
سبب غياب وظائف تحويل الأعداد الصحيحة الموقعة
يرجع غياب وظائف تحويل الأعداد الصحيحة الموقعة في المقام الأول إلى حقيقة أن تفسير التمثيل الثنائي كقيمة موقعة أو غير موقعة هو مسألة منطق البرمجة. تحتوي مجموعة البايتات [] نفسها على بيانات ثنائية أولية فقط، والتي يمكن تفسيرها على أنها موقعة أو غير موقعة وفقًا لمتطلبات التطبيق.كيفية التحويل إلى أعداد صحيحة موقعة
لتحويل قيمة عدد صحيح غير موقّع إلى عدد صحيح موقّع، يمكن استخدام تحويل نوع بسيط. نظرًا لأن تخطيط الذاكرة للأعداد الصحيحة غير الموقعة والأعداد الصحيحة ذات الحجم نفسه متطابق، فإن تحويل a من uint16 إلى int16 باستخدام int16(a) سيحتفظ بالتمثيل الثنائي الأصلي أثناء تعيين الإشارة المناسبة.التحويل إلى Floats
يتطلب التحويل من الأعداد الصحيحة غير الموقعة إلى الأعداد العائمة مزيدًا من المشاركة. توفر حزمة الرياضيات وظائف لهذا الغرض: math.Float32frombits() و math.Float64frombits(). على العكس من ذلك، يمكن استخدام math.Float32bits() وmath.Float64bits() للحصول على التمثيل الصحيح غير الموقع للقيم العائمة.استخدام Binary.Read() وBinary.Write()
تتضمن الحزمة الثنائية أيضًا وظائف القراءة () والكتابة () التي يمكنها إجراء هذه التحويلات بشكل أكثر كفاءة تحت الغطاء. تسمح لك هذه الوظائف بالقراءة مباشرة إلى قيمة مكتوبة دون الحاجة إلى تحويلات من النوع المتوسط.
مثال على استخدام Binary.Read () للتحويل العائم
خذ بعين الاعتبار ما يلي مثال:b := []بايت{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
فار بي float64
buf := bytes.NewReader(b)
يخطئ := ثنائي.قراءة(buf, ثنائي.LittleEndian, &pi)
إذا أخطأت!= لا شيء {
fmt.Println("فشل القراءة الثنائية:"، خطأ)
}
fmt.Println(pi) // الإخراج: 3.141592653589793
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3