Convert"big"hexnumbers(stringformat)todecimalnumbers(characters串格式),不带BigInteger类如何转换“大”hex数字(字符串格式):EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679到十进制数字(字符串格式):166089946137986168535368849184301740204613753693156360462575217560130904921953976324839782808018277000296027060873747803291797869684516494894741699267674246881622658654267131250470956587908385447044319923040838072975636163137212887824248575510341104029461758594855159174329892125993844566497176102668262139513不使用BigInteger类(因为我的应用程序应该支持没有.NETFramework4machine)?Here'saquickanddirtyimplementationthatcanhandlearbitrarilylargenumbers.Thegoalofthisimplementationissimplicity,notperformance;therefore,itshouldbeheavilyoptimizedifitistobeusedinaproductionscenario.编辑:进一步简化基于DanBystr?m实现的逆十进制到十六进制转换:staticstringHexToDecimal(stringhex){Listdec=newList{0};//十进制结果foreach(charcinhex){intcarry=Convert.ToInt32(c.ToString(),16);//最初保存当前十六进制数字的十进制值;//随后保留乘法结转for(inti=0;i0){dec.Add(carry%10);进位/=10;}}varchars=dec.Select(d=>(char)('0'+d));varcArr=chars.Reverse().ToArray();返回新字符串(cArr);我刚刚将道格拉斯的代码翻译成VBA函数HexToDecimal(ByValsHexAsString)AsStringDimdec()AsLongReDimdec(0To0)AsLongDimlCharLoopAsLongForlCharLoop=1ToLen(sHex)DimcharAs字符串*1char=Mid$(sHex,lCharLoop,1)DimcarryAsLongcarry=Val("&h"&char)DimiAsLongFori=0ToUBound(dec)DimlValAsLonglVal=dec(i)*16+进位dec(i)=lValMod10进位=lVal10NextiWhile(carry>0)ReDimPreservedec(0ToUBound(dec)+1)AsLongdec(UBound(dec))=carryMod10carry=carry10WendNext对于lCharLoop=UBound(dec)ToLBound(dec)Step-1DimsDecimalAsStringsDecimal=sDecimal&Chr$(48+dec(lCharLoop))NextHexToDecimal=sDecimalEndFunctionPrivateSubTestHexToDecimal()Debug.AssertHexToDecimal("F")="15"Debug.AssertHexToDecimal("4")=CStr(Val("&H4"))Debug.AssertHexToDecimal("10")=CStr(Val("&H10"))Debug.AssertHexToDecimal("20")=CStr(Val("&H20"))Debug.AssertHexToDecimal("30")=CStr(Val("&H30"))调试。断言HexToDecimal("40")=CStr(Val("&H40"))Debug.AssertHexToDecimal("44")=CStr(Val("&H44"))Debug.AssertHexToDecimal("FF")="255"Debug.AssertHexToDecimal("FFF")="4095"Debug.AssertHexToDecimal("443")=CStr(Val("&H443"))Debug.AssertHexToDecimal("443C1")="279489"Debug.AssertHexToDecimal("443C1CE20DFD592FB374D829B894BBE5")="90699627342249584016268008583970733029"Debug.AssertHexToDecimal("EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30"&_"C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5"&_"E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1"&_"986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679")=_"1660899461379861685353688491843017402046137536931563604625752175601309049219"&_"5397632483978280801827700029602706087374780329179786968451649489474169926767"&_"4246881622658654267131250470956587908385447044319923040838072975636163137212"&_"8878242485755103411040294617585948551591743298921259938445664971761026682621"&_"39513"EndSub也是来自statman.info的基准,十六进制到大数您可以使用IntX库,因为它应该与.Net2.0及更高版本一起使用来自关于BigInteger的页面描述:所以在内部System.Numerics.BigInteger似乎使用标准的任意算术算法,我我不担心IntX库,因为它使用FHT,对于非常大的整数可能会快一点。许可非常自由,但值得一读,只是为了确保它没问题。我没有使用过这个库,但是粗略地看了一下源代码,这应该是您需要做的所有事情stringdec=newIntX(myHex,16).ToString();如果您不想自己编译代码,可以通过Nuget安装它。一种简单的方法是使用支持您的.NET版本的大型数据库。我推荐GnuMpDotNet,它使用了优秀的GMP库。默认情况下,它以.NET3.5为目标,但您可以将其更改为.NET2.0而不会破坏任何内容(只需删除引用和引用新内容的using语句),因为它不使用.NET3.5的任何内容。下面是一个使用GnuMpDotNet的例子:BigInte=newBigInt(hexString,16);字符串decimalStr=e.ToString();在这里查看我的回答:https://stackoverflow.com/a/18231860/2521214值得一看我刚刚将Douglas代码翻译成PHP:functionBigNumberHexToDecimal($hex){$dec=array(0);$hexLen=strlen($hex);for($h=0;$h0){$dec[]=$进位%10;$进位=(int)($进位/10);}}returnjoin("",array_reverse($dec));}我刚把Douglas代码翻译成JAVA:以上是C#学习教程:把“Big”十六进制数(字符串格式)转换成十进制数(字符串格式),没有BigInteger类共享的所有内容。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——publicstaticStringHexToDec(Stringhex){Listdec=newArrayList();对于(intk=0;k0){十二月。添加(进位%10);进位/=10;}}int[]out=newint[dec.size()];for(inti=0;i本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,转载请注明出处:
