65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
/**
|
|
* @import { Num } from "./num.js"
|
|
*/
|
|
import { kBuffer } from "./num.js";
|
|
import { string16B } from "./string/16B.js"
|
|
import { string8B } from "./string/8B.js"
|
|
import { string2B } from "./string/2B.js";
|
|
import { string10B } from "./string/10B.js"
|
|
import { S8_0 } from "./symbol/S8.js";
|
|
import { S16_0 } from "./symbol/S16.js";
|
|
import { S2_0 } from "./symbol/S2.js";
|
|
import { S10_0 } from "./symbol/S10.js";
|
|
|
|
/**
|
|
* @param { Num } n
|
|
*/
|
|
export function string16(n) {
|
|
const { [kBuffer]: buff } = n;
|
|
let str = ""
|
|
for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S16_0) while (i >= 0) str += string16B(buff[i--]);
|
|
return `0x${str.padStart(1, "0")}`;
|
|
}
|
|
|
|
/**
|
|
* @param { Num } n
|
|
*/
|
|
export function string8(n) {
|
|
const { [kBuffer]: buff } = n;
|
|
let str = ""
|
|
for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S8_0) while (i >= 0) str += string8B(buff[i--]);
|
|
return `0o${str.padStart(1, "0")}`;
|
|
}
|
|
|
|
/**
|
|
* @param { Num } n
|
|
*/
|
|
export function string2(n) {
|
|
const { [kBuffer]: buff } = n;
|
|
let str = ""
|
|
for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S2_0) while (i >= 0) str += string2B(buff[i--]);
|
|
return `0b${str.padStart(1, "0")}`;
|
|
}
|
|
|
|
/**
|
|
* @param { Num } n
|
|
*/
|
|
export function string10(n) {
|
|
const { [kBuffer]: buff } = n;
|
|
let str = ""
|
|
for (let i = buff.length - 1; i >= 0; i--) if (buff[i] !== S10_0) while (i >= 0) str += string10B(buff[i--]);
|
|
return str.padStart(1, "0");
|
|
}
|
|
|
|
/**
|
|
* @param { Num } n
|
|
*/
|
|
export function string(n) {
|
|
switch (n.radix) {
|
|
case 2: return string2(n);
|
|
case 8: return string8(n);
|
|
case 16: return string16(n);
|
|
case 10: return string10(n);
|
|
default: throw new Error(`unsupported radix (${n.radix})`);
|
|
}
|
|
} |