legacy.blog.ari-web.xyz/blogs/Fast-atoi()-in-c-and-c++_-8139771109.html
Ari Archer 50ea3f7f35
update @ Thu 24 Feb 19:44:01 EET 2022
Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
2022-02-24 19:44:01 +02:00

92 lines
3.8 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta property="og:site_name" content="Ari::web -> Blog" />
<meta property="og:url" content="https://blog.ari-web.xyz/" />
<meta property="og:title" content="Ari::web -> Blog" />
<meta property="og:type" content="website" />
<meta name="theme-color" content="#262220" />
<meta name="color-scheme" content="dark" />
<meta charset="utf-8" />
<meta content="IE=edge" http-equiv="X-UA-Compatible" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<title>Ari::web -&gt; Blog</title>
<meta
content="website webdev linux programming ari terminal dark blog javascript opensource free"
name="keywords"
/>
<meta
content="Blog on 2022-01-20 17:10:10 EET - Fast atoi() in C and C++"
name="description"
/>
<meta content="follow" name="robots" />
<link rel="stylesheet" href="/styles/styles.css"/>
</head>
<body>
<div>
<h1>Fast atoi() in C and C++</h1>
<div style="text-align: center !important;">
<p>
2022-01-20 17:10:10 EET |
<a href=".."> back </a>
|
<a href="/"> home </a>
|
<a href="/git"> git </a>
</p>
</div>
<hr />
<p>
<code>std::atoi</code> (in C++) is fast on its own but can be slow so
for stuff you need speed you can use this:
</p>
<ul>
<li>Option one</li>
</ul>
<pre><code><span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">fast_atoi</span>(<span class="hljs-params"><span class="hljs-keyword">char</span> *int_string</span>) </span>{
<span class="hljs-keyword">int</span> <span class="hljs-keyword">value</span> = <span class="hljs-number">0</span>;
<span class="hljs-keyword">while</span> (*int_string &amp;&amp; *int_string &gt;= <span class="hljs-string">'0'</span> &amp;&amp; *int_string &lt;= <span class="hljs-string">'9'</span>)
<span class="hljs-keyword">value</span> = <span class="hljs-keyword">value</span> * <span class="hljs-number">10</span> + (*int_string++ - <span class="hljs-string">'0'</span>);
<span class="hljs-keyword">return</span> <span class="hljs-keyword">value</span>;
}
</code></pre>
<p>
This requires no headers, just pure C (also valid in C++), you can put
this into your code and it will just work!
</p>
<ul>
<li>Option two</li>
</ul>
<pre><code><span class="hljs-meta">#include &lt;assert.h&gt;</span>
<span class="hljs-function"><span class="hljs-keyword">int</span> <span class="hljs-title">fast_atoi</span>(<span class="hljs-params"><span class="hljs-keyword">char</span> *int_string</span>) </span>{
<span class="hljs-keyword">int</span> <span class="hljs-keyword">value</span> = <span class="hljs-number">0</span>;
<span class="hljs-keyword">while</span> (*int_string) {
<span class="hljs-keyword">if</span> (!(*int_string &gt;= <span class="hljs-string">'0'</span> &amp;&amp; *int_string &lt;= <span class="hljs-string">'9'</span>))
assert(<span class="hljs-number">0</span> &amp;&amp; <span class="hljs-string">"atoi(): invalid int_string"</span>);
<span class="hljs-keyword">value</span> = <span class="hljs-keyword">value</span> * <span class="hljs-number">10</span> + (*int_string++ - <span class="hljs-string">'0'</span>);
}
<span class="hljs-keyword">return</span> <span class="hljs-keyword">value</span>;
}
</code></pre>
<p>
This option is throws an assertion error if it encounters an invalid
string but this requires <code>assert.h</code> as a dependency.
</p>
<p>
In C++ <code>assert.h</code> should be replaced with
<code>cassert</code>.
</p>
</div>
</body>
</html>
<!-- this is automatically generated by scripts/add_blog -->