- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章PHP不使用内置函数实现字符串转整型的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
介绍 。
php字符串类型的数字如果想转成整型的数字,一般我们都是采用系统内置的API去做转换,但如果规定就不让我们去用系统内置的API转换,而是让自己去实现一个函数转换该怎么办?这里我们看下如何去实现.
系统内置 API 方式 。
1
2
3
4
5
6
7
8
9
10
11
|
$num
=
'345432123'
;
//(一)
$num
= (int)
$num
;
//输出:
//int(345432123)
//(二)
$num
=
intval
(
$num
);
//输出:
//int(345432123)
|
采用 ASCII 码方式 。
下面我们利用 ascii 码的方式去做转换,因为每个字符都对应一个 ascii 码,当对这个字符做加减乘除的时候,实际上就是对 ascii 码做加减乘除操作,也就是整型操作,最终会返回一个整型数字. 。
-图片转自网络- 。
通过上图可以看到字符 '0' ~ '9' 的 ascii 码是 48~57 我们在转换的时候就是用每一个字符减去 '0' 例如: '1' - '0' = 1、'2' - '0' = 2 返回值就是一个Int类型,下面具体看代码实现. 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function
convertInt(
$strInt
=
''
){
$len
=
strlen
(
$strInt
);
$int
= 0;
for
(
$i
=0;
$i
<
$len
;
$i
++){
$int
*= 10;
$num
=
$strInt
{
$i
} -
'0'
;
$int
+=
$num
;
}
return
$int
;
}
$num
=
'345432123'
;
var_dump(convertInt(
$num
));
//输出: int(345432123)
|
在 Redis 里面也有提供一个字符串转整型的函数,也是通过ascii码方式去做的,实现的比较完善严谨,具体可以参考下 。
string2ll 函数 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
#
include
<stdio.h>
#
include
<limits.h>
#
include
<string.h>
/* Convert a string into a long long. Returns 1 if the string could be parsed
* into a (non-overflowing) long long, 0 otherwise. The value will be set to
* the parsed value when appropriate. */
int string2ll(
const
char *s, size_t slen, long long *value) {
const
char *p = s;
size_t plen = 0;
int negative = 0;
unsigned long long v;
if
(plen == slen)
return
0;
/* Special case: first and only digit is 0. */
if
(slen == 1 && p[0] ==
'0'
) {
if
(value != NULL) *value = 0;
return
1;
}
if
(p[0] ==
'-'
) {
negative = 1;
p++; plen++;
/* Abort on only a negative sign. */
if
(plen == slen)
return
0;
}
/* First digit should be 1-9, otherwise the string should just be 0. */
if
(p[0] >=
'1'
&& p[0] <=
'9'
) {
v = p[0]-
'0'
;
p++; plen++;
}
else
if
(p[0] ==
'0'
&& slen == 1) {
*value = 0;
return
1;
}
else
{
return
0;
}
while
(plen < slen && p[0] >=
'0'
&& p[0] <=
'9'
) {
if
(v > (ULLONG_MAX / 10))
/* Overflow. */
return
0;
v *= 10;
if
(v > (ULLONG_MAX - (p[0]-
'0'
)))
/* Overflow. */
return
0;
v += p[0]-
'0'
;
p++; plen++;
}
/* Return if not all bytes were used. */
if
(plen < slen)
return
0;
if
(negative) {
if
(v > ((unsigned long long)(-(LLONG_MIN+1))+1))
/* Overflow. */
return
0;
if
(value != NULL) *value = -v;
}
else
{
if
(v > LLONG_MAX)
/* Overflow. */
return
0;
if
(value != NULL) *value = v;
}
return
1;
}
//-------- 执行 ---------
int main(){
long long num;
string2ll(
"345432123"
,
strlen
(
"345432123"
),&num);
printf(
"%d\n"
,num);
//输出 345432123
retunr 0;
}
|
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对我的支持.
原文链接:http://www.jianshu.com/p/9bc72757a6e8 。
最后此篇关于PHP不使用内置函数实现字符串转整型的方法示例的文章就讲到这里了,如果你想了解更多关于PHP不使用内置函数实现字符串转整型的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我试图在 (C) Python 源代码中找到内置 in 运算符的实现。我在内置函数源代码中搜索过,bltinmodule.c ,但找不到此运算符的实现。我在哪里可以找到这个实现? 我的目标是通过扩展此
我们正在开发一个 shell(学校项目)。我们不理解一种行为。为什么内置函数在重定向时不起作用? 喜欢 cd - | command 不改变目录。 或 export NAME=VALUE | comm
有人问有关如何对列表进行排序的问题。从基本List.Sort()到List.OrderBy()有几种方法。最可笑的是自己动手的SelectionSort。我迅速将其否决,但这使我思考。应用于列表的
我正在尝试使用 C 中内置的 qsort 函数对结构进行排序 typedef struct abc{ long long int fir; long long int sec; }abc; 在
我觉得有一些内置的东西。如果对象为空,我想要默认值(或者特别是 0,我只使用十进制/整数)。是否有编写此函数的内置方法? static int GetDecimalFromObject(object
Java 是否有用于生成和解析文档的内置 XML 库?如果不是,我应该使用哪个第三方? 最佳答案 Sun Java 运行时附带 Xerces 和 Xalan 实现,它们提供解析 XML(通过 DOM
我对 python 的“all”和生成器有以下问题: G = (a for a in [0,1]) all(list(G)) # returns False - as I expected 但是:
我有一些使用 gcc 内部函数的代码。我想包含代码以防缺少内在函数。我该怎么做? #ifdef __builtin_ctzll 不起作用。 最佳答案 使用最新版本的 clang,现在可以使用 __ha
人们常说应该在本地重新声明(某些)Lua 函数,因为这样可以减少开销。但这背后的确切规则/原则是什么?我怎么知道哪些功能应该完成,哪些是多余的?还是应该为每个功能完成,甚至是您自己的功能? 不幸的是,
我想实现以下功能: TestClass values 接受任意数量的 NewClass 对象 只有 NewClass 对象没有完全相同的属性值被添加到TestClass.values 我想出了这个:
我正在尝试编写一个存储过程(使用 SQL Server Management Studio 2008 R2)以从表中检索最大测量值。这似乎是一件容易的事,所以我写了一个简短的存储过程来获取 MAX。但
我刚写了我的第一个Electron应用程序。现在,我正在尝试通过electron-packager构建它。我的package.json看起来像这样: { "name": "pixelcast",
我正在寻找在 WPF 应用程序中使用的“安全”字体系列列表 - 应该安装在所有能够运行 WPF 的客户端机器上的字体系列。 Silverlight 有一个明确定义的列表( listed on MSDN
好吧,(在写了几次之后)发现System.Windows.Controls命名空间中已经有一个BooleanToVisibilityConverter,这真是一个惊喜。 可能还有更多这样隐藏的节省时间
在我的 gradle 构建文件中,我有以下插件 block plugins { `java-library` jacoco checkstyle } 这些都没有指定版本,但一切
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
10 implementations String#reverse 已根据每个浏览器进行分析。 自 2011 年以来已对这些实现进行了解释。 当 ES6 出现时,有很多代码变得更加优雅和性能。 关于
在 Julia 包 BenchmarkTools 中,有一些像 @btime、@belapse 这样的宏对我来说似乎是多余的,因为 Julia 内置了@time、@elapse 宏。在我看来,这些宏服
我正在尝试编写一个简单的 LLVM 通行证,其目标如下: 查找所有 call指示。 在被调用函数中插入我编写的外部函数。 例如,考虑我有以下示例程序: #include #include int
我理解 'a) -> (rhs:'a -> 'a) -> 'a 在我感兴趣的情况下,我经常发现自己想要类似 (lhs:'a -> 'b) -> (rhs:'c -> 'b) -> 'b 的东西在侧面
我是一名优秀的程序员,十分优秀!