§

Options

§

Binary (msingi 2)

§

Octal (msingi 8)

§

Decimal (msingi 10)

§

Hexadecimal (msingi 16)

§

Msingi wa kawaida

Ubadilishaji wa msingi wa nambari ni ujuzi wa msingi katika sayansi ya kompyuta na uhandisi wa programu. Mifumo ya embedded, debuggers, na uchambuzi wa usalama katika Afrika Mashariki yote yanahitaji ubadilishaji wa haraka kati ya hex, decimal, na binary. Mkaguzi wa usalama anayeandika ripoti za pentest, mwanafunzi wa kozi ya CS, au mhandisi wa firmware wote wanashiriki hitaji hilo. Kibadilishaji hiki hushughulikia sehemu ya kiufundi ili wahandisi watumie muda wao kwa tafsiri, si hesabu.

Ubadilishaji wa msingi unafanya kazi vipi

Kila mfumo wa nambari wa nafasi unawakilisha thamani kama jumla ya tarakimu zilizozidishwa na nguvu za msingi. Kubadilisha misingi kunamaanisha kuandika upya thamani ile ile dhidi ya mfululizo tofauti wa nguvu.

  1. Thibitisha alfabeti ya ingizo. Kila msingi unakubali seti maalum ya tarakimu. Binary inakubali 0 na 1; octal inakubali 0-7; decimal inakubali 0-9; hex inakubali 0-9 na A-F. Tabia nje ya alfabeti iliyochaguliwa inaonyesha hitilafu ya ndani kabla ubadilishaji wowote kufanywa.
  2. Chambua thamani. Kwa thamani zinazofaa ndani ya Nambari ya JavaScript (hadi 2^53-1) zana inaiita parseInt(maandishi, msingi). Zaidi ya mipaka hiyo inarudi kwenye BigInt ili ubadilishaji ubaki sahihi kwa nambari kamili kubwa bila kikomo.
  3. Unda upya katika kila msingi wa lengo. Thamani iliyochambuliwa inabadilishwa hadi kila msingi wa matokeo kupitia Number.prototype.toString(msingi) au BigInt.prototype.toString(msingi). Madirisha manne ya kawaida (binary, octal, decimal, hex) na kidirisha cha msingi wa kawaida vinasasishwa pamoja.
  4. Tumia uumbaji. Kitufe cha kiambishi awali kinaongeza 0b, 0o, au 0x mbele ya matokeo ya binary, octal, na hex. Kupanga tarakimu kunaweka msalaba kila tarakimu nne za binary na kila tarakimu mbili za hex. Kitufe cha herufi kubwa/ndogo za hex huchagua herufi kubwa au ndogo kwa A-F.
  5. Uratibu wa moja kwa moja wa madirisha mengi. Kuhariri kidirisha chochote huanzisha ubadilishaji upya uliodanganywa kwa ms 100 ambao husasisha madirisha mengine. Kidirisha unachoandika ndani yake huchukuliwa kama chanzo cha ukweli kwa kila kupiga kitufe.

Kwa nini utumie kibadilishaji cha msingi

  • Kusoma madumpu ya kumbukumbu. Debuggers, disassemblers, na vitazamaji vya core-dump vinaonyesha anwani na thamani za rejista katika hex. Kuzitafsiri hadi decimal huzifanya zinaweza kulinganishwa na hesabu, saizi, na offsets zilizoripotiwa mahali pengine katika ufuatiliaji ule ule.
  • Kufanya kazi na nambari za rangi. CSS, zana za kubuni, na muundo wa picha zinaandika rangi katika jozi za hex kama #d2511a. Kubadilisha kila jozi hadi decimal inabadilisha rangi ile ile kuwa fomu ya rgb(210, 81, 26) ambayo kichaguzi chako cha rangi au mfumo wa ukaguzi wa upatikanaji unatarajia.
  • Kusimbua ruhusa za faili. Thamani za chmod za Unix zinaandikwa katika octal: 755 inamaanisha rwxr-xr-x ukitafsiri kila tarakimu ya octal hadi bits tatu za binary. Kibadilishaji kinaonyesha ramani hiyo katika hatua moja ili uweze kukagua seti ya ruhusa bila kutafuta ukurasa wa mwongozo.
  • Kutatua hitilafu za bendera za bit. Itifaki za mtandao, syscalls za kernel, na rejista za vifaa vinafunga bendera nyingi za boolean katika nambari kamili moja. Kusoma nambari kamili katika binary inaonyesha bits zipi zimewekwa kwa mtazamo, ambayo ndiyo unayohitaji unapofuatilia kwa nini bendera haifanyi kazi.

Matumizi ya kawaida

Ubadilishaji wa msingi unaonekana katika kazi ya kila siku ya mwendelezaji, usalama, na vifaa wakati nambari ni zaidi ya hesabu tu.

  • Firmware ya embedded: soma madumpu ya hex kutoka kwa uchunguzi wa JTAG, pata anwani ya kazi, na andika amri ya nukta ya kusimama ukitumia offset ya decimal inayokubalika na hati ya debugger yako.
  • Usalama wa mtandao: chambua netmask ya biti 32 iliyochapishwa kwa decimal yenye nukta kurudi hadi binary kuhesabu urefu wa kiambishi awali, kisha andika fomu ya CIDR kwa sheria ya ACL.
  • Mafumbo ya CTF na changamoto za crypto: badilisha kati ya hex, decimal, na binary ukiwa unalinganisha kipande cha ufunguo kilichovuja dhidi ya maandishi ya mgombea wa wazi chini ya XOR.

Mfano uliofanyiwa kazi

Andika 255 kwenye kidirisha cha decimal. Kidirisha cha hex kinasasishwa hadi FF (au 0xFF na kitufe cha kiambishi awali kimewashwa), kidirisha cha binary hadi 11111111 (kimepangwa kama 1111_1111), na kidirisha cha octal hadi 377. Badilisha radix ya kidirisha cha kawaida hadi 36 na thamani ile ile inaonyeshwa kama 73. Andika thamani kubwa zaidi kama vile 123456789012345678901234567890 kwenye kidirisha cha decimal; kidirisha cha hex kinatumia njia ya BigInt na kinaonyesha 18EE90FF6C373E0EE4E3F0AD2.

FAQ

Msingi wa nambari ni nini?

Msingi wa nambari, au radix, ni idadi ya tarakimu tofauti ambazo mfumo wa nafasi hutumia kabla kubeba hadi nafasi inayofuata. Decimal (msingi 10) inatumia 0-9; binary (msingi 2) inatumia 0 na 1 tu; hexadecimal (msingi 16) inatumia 0-9 pamoja na A-F. Thamani ya nambari haibadiliki unapobadilisha misingi — jinsi tarakimu zake zinavyoandikwa na kupangwa tu inabadilika.

Kwa nini hexadecimal inatumika katika uprogramu?

Tarakimu moja ya hex inawekwa ramani hadi bits nne za binary, kwa hivyo tarakimu mbili za hex zinashughulikia byte na tarakimu nane za hex zinashughulikia neno la bits 32. Hiyo inafanya hex kuwa fomu ndogo zaidi inayosomeka na binadamu kwa anwani za kumbukumbu, maudhui ya rejista, jozi za rangi, na funguo za kisiri. Kusoma 0xFF ni haraka zaidi kuliko kusoma 11111111, na mfumo wa bit uko pale pale ukihitajika.

Je, naweza kubadilisha zaidi ya msingi 36?

Zana hii inasimama kwa msingi 36 kwa sababu hiyo ndiyo mipaka ya juu ya API asilia za JavaScript za parseInt na toString, ambazo zinakubali 0-9 ikifuatiwa na A-Z kama alfabeti ya tarakimu. Misingi 37-62 inawezekana na alfabeti ya kawaida (Base58 inayotumiwa katika anwani za Bitcoin ni mfano mmoja) lakini zinafuatiliwa kama zana tofauti kwa sababu kila msingi wa juu zaidi unahitaji mpangilio wake wa kawaida wa tarakimu.

Je, hii inashughulikia nambari hasi na floats?

Nambari kamili hasi zinaonyeshwa na ishara ya kuondoa inayoongoza katika kila msingi, tabia ile ile ambayo Number.prototype.toString inasafirisha nayo. Uwakilishi wa two's-complement katika upana wa bits uliochaguliwa (8, 16, 32, 64) ni mtazamo tofauti tunaoandika kupongeza. Ubadilishaji wa msingi wa nambari za floating-point pia uko nje ya wigo wa toleo hili; zana inashughulikia thamani za nambari kamili tu.

Ubadilishaji wa msingi ni kazi ndogo inayotokea mara kwa mara katika firmware, usalama, na kazi za graphics. Kuifanya kwenye kichupo cha kivinjari, na vipande vile vile vya hesabu ambavyo Node na V8 tayari vinasafirisha, kunaweka kazi haraka na data kwenye mashine yako.