import React, { useEffect, useState } from "react"; import { useTranslation, Trans } from "react-i18next"; import * as styles from "./NumberBaseTool.module.scss" import { Helmet } from "react-helmet"; import BoxMessage from "../../../components/BoxMessage"; import { AlertOctagon } from "lucide-react"; const NumberBaseTool = () => { const { t } = useTranslation(); let [input, setInput] = useState("10"); let [inputType, setInputType] = useState<"dec"|"hex"|"oct"|"bin">("dec"); let [nanState, setNanState] = useState(false) let [dec, setDec] = useState(""); let [bin, setBin] = useState(""); let [oct, setOct] = useState(""); let [hex, setHex] = useState(""); useEffect(() => { let num = 0 switch(inputType) { case "dec": num = parseInt(input.replaceAll(" ", ""), 10) break case "hex": num = parseInt(input.replaceAll(" ", "").replace(/^(0x)/,''), 16) break case "oct": num = parseInt(input.replaceAll(" ", ""), 8) break case "bin": num = parseInt(input.replaceAll(" ", ""), 2) break } if(isNaN(num)) { setNanState(true) switch(inputType) { case "dec": setDec(input) setHex("") setOct("") setBin("") break case "hex": setHex(input) setDec("") setOct("") setBin("") break case "oct": setOct(input) setDec("") setHex("") setBin("") break case "bin": setBin(input) setDec("") setHex("") setOct("") break } return } setNanState(false) setDec(num.toString(10).replace(/\B(?=(\d{3})+(?!\d))/g, " ")) setBin(num.toString(2).replace(/\d{4}(?=.)/g, '$& ')) setOct(num.toString(8)) setHex(num.toString(16)) }, [input, inputType]) return (
{t("tools.encodings.numberbase.title")} | {t("site.title")}

{t("tools.encodings.numberbase.title")}

} color="red" hideInPlace={!nanState}>{t("tools.encodings.numberbase.nanWarning")}
) } export default NumberBaseTool;