HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

バイト値を得るためのユーティリティ

何に使うのかは知らないが(待て)、例えばC言語

#include <stdio.h>

int main(int argc, char* argv[]) {
    int byteValue = 'a';
    printf("%d\n", byteValue);
}

として得られる「97」という数値を、PHPでは得られないのだよなぁ、と思って作ってみた。

<?php
/**
 * 文字からバイト値を得るためのユーティリティクラス。
 */
class CharByteMap {
    private static $charByteMap = array();
    /**
     * 指定した文字列の先頭1文字のバイト値を取得する。
     * 
     * @param $s string バイト値を取得したい文字列
     * @return int 指定した文字列の長さが1以上の場合は
     *             先頭1文字のバイト値、それ以外の場合は-1
     */
    public static function getByte($s) {
        /* 初期化 */
        self::initialize();

        /* 先頭1文字のバイト値を返却 */
        switch (strlen($s)) {
        case 0:
            return -1;
        case 1:
            return self::$charByteMap[$s];
        default:
            return self::$charByteMap[substr($s, 0, 1)];
        }
    }
    /**
     * 文字⇒バイト値のマップを生成する。
     */
    private static function initialize() {
        if (empty(self::$charByteMap)) {
            for ($i = 0; $i < 256; ++$i) {
                self::$charByteMap[sprintf("%c", $i)] = $i;
            }
        }
    }
}
?>

使用法は以下のような感じ。

<?php
$byteValue = CharByteMap::getByte("a");
printf("%d\n", $byteValue);
?>