تحويل أرقام سداسية عشرية في الأوتار إلى الأرقام السلبية ، في بيرل

StackOverflow https://stackoverflow.com/questions/2111839

  •  22-09-2019
  •  | 
  •  

سؤال

لديّ مجموعة من الأرقام ممثلة كأسلاك سداسية عشرية في ملفات السجل التي يتم تحليلها بواسطة نص 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top