[C言語] 07 数字の文字列をuint64_tに変換する

すぐに忘れそうなのでメモ書きしておきます。

第2引数&endの意味がよく分かりません。適当なポインタを入れておけば良いのでしょうか。

IBMやMicrosoftの資料によると、文字列の読み取りを停止した文字(ヌル文字など)へのポインタを&endに格納するとのことです。読み取り不可の場合は文字列をそこに格納します。char* end = NULLでも問題ないみたいです。

#include <stdlib>

uint64_t numA;
uint64_t numB;
char* end;

<中略>

// sscanfで文字列として読み込んだnumAを16進数のuint64_tへ変換する
numB = strtoull(numA,&end,16);

[Python] 291 C言語実行ファイルの併用 その5 ハッシュ関数 FNV 64bit

ハッシュ関数fnvの32bitで競走馬名ハッシュ値の衝突が生じたため、64bitハッシュ値での検索処理時間を計測してみました。

やはり32bitの55秒に対し77秒と遅くなりました。

ハッシュ値検索にこだわるならばFNVでは32bitで運用するしかないですが、同一誕生年内での衝突はないので私の使い方では今のところトラブルになることはありません。

ところで、Excelで表をまとめていて64bit以上の整数を正確に表示できない問題に遭遇しました。仕方ないので文字列扱いにして解決しました。

他にも小数点数と整数の区別ができない、UTF-8のCSVファイルが基本文字化けする、数字とハイフンがあると勝手に日付と解釈する、など何かとプログラマ泣かせのソフトです。

macOSのNumbersでは64bit整数でも問題なく表示できます。今はなきLotus1-2-3はどうだったのか少し気になります。

情報科学においてunsigned long long integerを”符号なし長長整数”などといった日本語に翻訳していないのが不思議です。