转自:https://blog.csdn.net/liujinsuoabc/article/details/18354275
最近在封装Excel组件,需要提供两个接口,分别根据单元索引和单元名称访问单元格。例如,GetCell(1, 2)和GetCell(“A2”),这两种方法返回的结果是相同的。这里遇到一个问题,如何在单元索引([1,2])和单元名称(A2)之间相互转换?
由于在单元索引和单元名称中,行号是相同的,所以我们只需要转换列号就可以了。本来以为是个很简单的问题,结果调试了好长时间才搞定。于是写了这篇文章,总结一下。
【问题描述】
在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。
我们需要将上述列名序列和以下自然数序列相互转换:1、2、3、…。
【问题分析】
经过分析,我们不难发现,这是一个26进制和十进制相互转换的问题。序列A-Z依次对应序列1-26。进制转换的基本办法就是“取余法”,换算规则如下:
ABZ = 1*26² + 2 * 26¹ + 26*26°= 676 + 52 + 26 = 754
于是,我们就知道该如何设计一个十进制转换为26进制的算法了。
【算法描述】
Step1.[取余] 用指定自然数n除以26,得到一个余数m。如果m = 0,置m←26。
Step2.[转换为字符] 将m映射为字符c,映射规则是{1-26}->{A-Z}。然后将c拼接到26进制值s的左边,也就是置s←c + s。
Step3.[去余降幂] 置n←(n–m)/26。如果n > 0,则回到Step1继续执行,否则进入Step4。
Step4.[结束] 返回s。
按照上述思想,26进制转换为十进制的过程正好是相反的,而且实现起来也更为简单,在此不述。
运行结果如下图所示:
【总结】
一般情况下,各种进制都是以0为起点递增的,例如,八进制(0-7),16进制(0-F)。在本文中,我们设计的26进制是以A为起点的,而不是0,这是主要的不同点。
php代码实现:
相关推荐
字母转换为数字(26进制转换为10进制)
主要实现二进制和十进制的数字转换的源代码,void CharToHex(char * dest, char * buffer , int len)中实现了字母间的二进制转换
常用进制转换工具是款非常实用的常用进制转换工具,能够轻松的实现十六进制、十进制、八进制和二进制数之间的相互转换,让你转换常数更加轻松便捷。
子网划分辅助:即IP地址十进制与二进制的相互转换,以及二进制的与、或、取反操作 附加工具: .ASCII表:0-127的ASCII表,以2、8、10、16及HTML分别表示 .简化计算器:四则运算、乘方、开方、阶乘。大部分功能...
8086系统,利用汇编语言实现8位以上进制转换
Python实现的进制转换器#1、十六进制以内实数任意进制对任意进制的转换 #2、小数位数超过十位保留十位小数 #3、包含负数的转换(是数值的转换而不是补码) #4、能够实现更高进制的转换:直接增加waitNumber中的字母...
本源码演示Delphi 如何将十六进制转换为十进制,例如将16进制的ABC转换成10进制的2740,请注意,为确保转换的准确性,请输入大写的16进制的英文字母。
1、计算机的数制有哪些 2、十进制、二进制、十六进制分别有哪些特点 3、十进制、二进制、十六进制分别可用哪些字母来表示 4、二进制数的位数与其状态有什么关系 5、字节的概念是什么 6、如何将二进制数、十六进制数...
一般常见为36进制转10进制,但为了区分26个字母中O和I与阿拉伯数字0和1相似,所以特殊情况会用34进制转10进制( 三十四进制转十进制 )的换算。目的是排除26个字母中O和I,24个字母+10个阿拉伯数字=34。...
子网划分辅助:即IP地址十进制与二进制的相互转换,以及二进制的与、或、取反操作 附加工具: .ASCII表:0-127的ASCII表,以2、8、10、16及HTML分别表示 .简化计算器:四则运算、乘方、开方、阶乘。大部分功能支持...
题目描述:将M进制的数X转换为N进制的数输出。 输入描述:输入的第一行包括两个整数:M和N(2,N)。下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。 输出描述: 输出X的N进制表示的...
子网划分辅助:即IP地址十进制与二进制的相互转换,以及二进制的与、或、取反操作 附加工具: .ASCII表:0-127的ASCII表,以2、8、10、16及HTML分别表示 .简化计算器:四则运算、乘方、开方、阶乘。大部分功能支持...
子网划分辅助:即IP地址十进制与二进制的相互转换,以及二进制的与、或、取反操作 附加工具: .ASCII表:0-127的ASCII表,以2、8、10、16及HTML分别表示 .简化计算器:四则运算、乘方、开方、阶乘。大部分功能支持...
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。 样例输入 FFFF 样例输出 65535 思路:感觉自己的...
主要介绍了C#十六进制字符串转十进制int的方法,涉及C#操作数制转换的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
包含按键中的正则表达式、时间日期、随机(随机输出数字、字母、汉字,数字字母混合,数字汉字混合,以及你能够想像得出的任意组合方式)。 字符函数(字符串-提取、字符串-输出、字符串-返回、字符串-删除) excel...
主要介绍了PHP实现十进制数字与二十六进制字母串相互转换操作,涉及php字符串遍历、转换相关操作技巧,需要的朋友可以参考下
完成一个字母或数制之间的转化程序,主程序分别具有3种可选择的子功能,按相应的字母(X=>功能1; Y=>功能2; Z=>功能3)可分别进入相应...(2)实现十进制数向十六进制数的转换; (3)实现十六进制数向十进制数的转换。
解压后运行Ascii2Hex.exe即可,只支持数字字母(大小写),其他不支持。若需要支持请联系friendsdan_angle@163.com