تحويل أرقام سداسية عشرية في الأوتار إلى الأرقام السلبية ، في بيرل
سؤال
لديّ مجموعة من الأرقام ممثلة كأسلاك سداسية عشرية في ملفات السجل التي يتم تحليلها بواسطة نص Perl ، وأنا عديمي الخبرة نسبيًا مع Perl.
بعض هذه الأرقام موقعة بالفعل أرقام سالبة ، أي 0xFFFE == -2
عند تمثيلها كصبع عدد صحيح موقّع 16 بت.
هل يمكن لأي شخص أن يخبرني بالطريقة القانونية للحصول على تمثيل موقّع لهذا الرقم من السلسلة FFFE
في بيرل ، أو أوجهني إلى برنامج تعليمي أو مورد آخر؟
المحلول
يمكنك استعمال ال عرافة() وظيفة للتحويل من السداسي عشري إلى عشري ، ولكنها تفسر المدخلات كقيمة غير موقعة. للتعويض عن ذلك ، قم بتعبئة القيمة العشرية ككمية غير موقعة وتفريغها كواحدة موقعة:
my $num = unpack('s', pack('S', hex('FFFE')));
قوالب "S" و "S" مخصصة لكميات 16 بت موقعة وغير موقعة ، على التوالي. انظر الوثائق ل pack
وظيفة للقوالب الأخرى ومعلومات الاستخدام.
نصائح أخرى
print unpack('s>', pack('H4', 'FFFE'));
-2
لا تنتمي إلى StackOverflow