סקלרים ומחרוזות · פונקציות מספריות
hex#
מפרש מחרוזת כספרה הקסדצימלית ומחזיר את ערכה המספרי.
hex קורא את EXPR כרצף של ספרות הקסדצימליות - אופציונלית עם קידומת 0x או x - ומחזיר את המספר השלם שאותן ספרות מייצגות. אם EXPR מושמט, נעשה שימוש ב־$_. הפעולה המלווה, להפיכת מספר חזרה למחרוזת הקסדצימלית, היא sprintf עם הפורמט "%x" או "%X".
תקציר#
hex EXPR
hex # operates on $_
מה מקבלים בחזרה#
מספר אי־שלילי. hex עצמו לעולם אינו מחזיר ערך שלילי: אין לו מושג של סימן, הוא רק מפענח ספרות.
אם התוצאה נכנסת במספר שלם מקומי (בדרך כלל 64־ביט ללא סימן בבניית 64־ביט), תקבלו מספר שלם.
אם הערך המפוענח חורג מטווח זה,
hexחוזר ל־double של IEEE 754. נפלטת אזהרה תחתuse warningsועלול לאבד דיוק עבור ערכים מעל2**53.
להמרה בכיוון ההפוך:
sprintf "%x", 255 # "ff"
sprintf "0x%08X", 4096 # "0x00001000"
דוגמאות#
ספרות הקסדצימליות רגילות, עם או בלי הקידומת 0x:
print hex '0xff'; # 255
print hex 'ff'; # 255
print hex 'DEADBEEF'; # 3735928559
קווים תחתונים בין ספרות מותרים כמפרידים חזותיים, באותה דרך שליטרלים מספריים מתירים אותם:
print hex '1_0000'; # 65536
print hex 'cafe_f00d'; # 3405700109
פעולה על $_:
for ('10', '20', 'ff') {
print hex, "\n"; # 16, 32, 255
}
נסיעה חזור של ערך דרך hex:
my $n = 0xC0FFEE;
my $s = sprintf "%x", $n; # "c0ffee"
print hex $s; # 12648430
ערכים העוברים את רוחב המספר השלם המקומי מזהירים ומחזירים מספר נקודה צפה:
use warnings;
my $big = hex 'ffffffffffffffffff'; # 19 'f's - too wide for u64
# "Integer overflow in hexadecimal number" warning
# $big is now an IEEE 754 double, with lost precision
מקרי קצה#
תווים שאינם הקסדצימליים מסיימים את הפענוח. התו הראשון שאינו ספרה הקסדצימלית, קו תחתון או קידומת מוכרת מסיים את הסריקה. תחת
use warningsזה פולטIllegal hexadecimal digit '…' ignored:use warnings; print hex '1f garbage'; # 31, with a warning print hex '0xAZ'; # 10, with a warning on 'Z'
רווח מוביל אינו מדולג. בשונה מ־
oct,hexמתייחס לרווח לבן כתו שאינו הקסדצימלי, ולכן רווח מוביל עוצר את הפענוח לפני שנראית ספרה כלשהי:print hex ' ff'; # 0
מחרוזת ריקה ו־
undefמחזירות0.EXPRריק מניב0ללא אזהרה.undefחשוף מניב0ופולט את אזהרת ה־Use of uninitialized valueהרגילה תחתuse warnings.אין טיפול בסימן.
-או+מובילים הם תווים שאינם הקסדצימליים ומסיימים את הפענוח לפני ספרה כלשהי, כך ש־hex '-ff'מחזיר0. כדי לפענח מחרוזת הקסדצימלית עם סימן, הסירו את הסימן בעצמכם:my $s = '-ff'; my $n = ($s =~ s/^-//) ? -hex($s) : hex($s); # -255
צורות קידומת. הקידומות המקובלות הן
0x,0X,xו־X.0בודד אינו קידומת - הוא ספרה. אין קידומת#או$.גודל האותיות אינו רלוונטי עבור הספרות
a-fועבור אות הקידומתx.מיקום קו תחתון. קו תחתון בודד יכול להקדים כל ספרה. שני קווים תחתונים רצופים, קו תחתון מוביל לפני הקידומת, או קו תחתון נסחב מסיימים את הפענוח כתווים שאינם הקסדצימליים.
הבדלים מ־upstream#
תואם מלא ל־upstream Perl 5.42.
ראו גם#
oct- מפענח מחרוזות עם בסיס מזוהה אוטומטית:0x…כהקסדצימלי,0b…כבינארי,0…כאוקטלי, כל דבר אחר כעשרוני. השתמשו בה כאשר בסיס הקלט אינו ידוע מראשsprintf- הכיוון ההפוך;"%x"/"%X"מעצבים מספר למחרוזת הקסדצימלית באותיות קטנות או גדולות,"%#x"מוסיף את הקידומת0x,"%08x"מרפד באפסים לרוחב קבועprintf- אותו עיצוב"%x", נכתב ישירות למטפל קובץpack- התבניותH(חצי־בית גבוה ראשון) ו־h(חצי־בית נמוך ראשון) ממירות בין מחרוזת ספרות הקסדצימליות לבתים בינאריים ארוזים; השתמשו בהן בעת העברת נתונים הקסדצימליים אל ומתוך פרוטוקול בינאריunpack- ההיפוך שלpack; עם"H*"הוא הופך מחרוזת בתים למחרוזת ספרות הקסדצימליות בקריאה אחת