base2base(Nstart,bs​tart,bend)

バージョン 1.0.0.0 (7.31 KB) 作成者: John D'Errico
Numeric base conversion between any two numeric bases, for any size integer.
ダウンロード: 423
更新 2016/8/27

ライセンスの表示

Existing functions in MATLAB like dec2bin, dec2base, base2dec are limited in scope to work in double precision. So numbers cannot exceed 2^53-1. As well, those tools cannot convert to and from bases higher than 36, due to the character encoding employed. Yes, hex is a nice way to read hexadecimal numbers. But things can get nasty when working in say base 36, because 'O' and '0' can be difficult to distinguish. Finally, the existing tools cannot convert directly between two bases. So if you wanted to move between base 2 and base 3, you might use base2dec, then dec2base. But that forces you to use double precision as an intermediate storage. So if your number exceeded 2^53-1, that scheme would fail.
base2base resolves all of those issues, by providing a tool with no limits. If character inputs are provided, it will return a character encoded output, just as the built-in MATLAB tools do. A few examples should show the various problems base2base can solve.
Example: Convert decimal numbers 0:10 from base 2 into base 3
Nstart = dec2bin(0:10)
Nstart =
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010

Nend = base2base(Nstart,2,3)
Nend =
000
001
002
010
011
012
020
021
022
100
101

Example: base conversion for a really large number (this conversion was verifed using vpi2base)

base2base('1234567890123456789012345678901234567890123456789012345678901234567890',10,8)
ans =
26712730460557502321115663104163350570542770265664630627263177431331617605322

Example: hex to binary
base2base('FFFBC1234A',16,2)
ans =
1111111111111011110000010010001101001010

The above examples all worked using character encoded digits. But if we want to go past base 36, that gets more difficult in an encoded form.

Example: conversion from base 10 to base 1000

base2base([1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9],10,1000)
ans =
123 456 789 123 456 789

Example: conversion between two bases, both of which are larger than 36. I've chosen number bases where the result will be easy to verify here.

base2base([233 455 876 342 645],1000,100)
ans =
2 33 45 58 76 34 26 45

引用

John D'Errico (2024). base2base(Nstart,bstart,bend) (https://www.mathworks.com/matlabcentral/fileexchange/58850-base2base-nstart-bstart-bend), MATLAB Central File Exchange. 取得済み .

MATLAB リリースの互換性
作成: R2016a
すべてのリリースと互換性あり
プラットフォームの互換性
Windows macOS Linux
カテゴリ
Help Center および MATLAB AnswersData Type Conversion についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
バージョン 公開済み リリース ノート
1.0.0.0

Repaired test.