2006/08/09(水)Perlによるbase64エンコード/デコードの実装

エンコード

MIME::Base64(C実装)を使えば速いのですが、メールのタイトル程度でそこまでする必要はないし*1、かと言って日本で有名な某MIMEルーチンは、巨大変換テーブルという非効率な実装なので、自作した奴。

# テーブル
my $base64table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
# 変換処理
$subject =~ s/(\e\$[\@B].*?\e\([BJ])/ '=?ISO-2022-JP?B?' . &base64encode($1) . '?=' /eg;

sub base64encode {
	my $str = shift;
	my $table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
	my $ret;

	# 2 : 0000_0000 1111_1100
	# 4 : 0000_0011 1111_0000
	# 6 : 0000_1111 1100_0000
	my ($i, $j, $x, $y);
	for($i=$x=0, $j=2; $i<length($str); $i++) {
		$x    = ($x<<8) + ord(substr($str,$i,1));
		$ret .= substr($table, ($x>>$j) & 0x3f, 1);

		if ($j != 6) { $j+=2; next; }
		# j==6
		$ret .= substr($table, $x & 0x3f, 1);
		$j    = 2;
	}
	if ($j != 2)    { $ret .= substr($table, ($x<<(8-$j)) & 0x3f, 1); }
	if ($j == 4)    { $ret .= '=='; }
	elsif ($j == 6) { $ret .= '=';  }

	return $ret;
}

*1 : Perlは外部モジュールロードが速くない

デコード

# テーブル
my @base64ary = (
 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0,  0, 0, 0, 0,	# 0x00~0x1f
 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0, 0,  0, 0, 0, 0,	# 0x10~0x1f
 0, 0, 0, 0,  0, 0, 0, 0,   0, 0, 0,62,  0, 0, 0,63,	# 0x20~0x2f
52,53,54,55, 56,57,58,59,  60,61, 0, 0,  0, 0, 0, 0,	# 0x30~0x3f
 0, 0, 1, 2,  3, 4, 5, 6,   7, 8, 9,10, 11,12,13,14,	# 0x40~0x4f
15,16,17,18, 19,20,21,22,  23,24,25, 0,  0, 0, 0, 0,	# 0x50~0x5f
 0,26,27,28, 29,30,31,32,  33,34,35,36, 37,38,39,40,	# 0x60~0x6f
41,42,43,44, 45,46,47,48,  49,50,51, 0,  0, 0, 0, 0	# 0x70~0x7f
);
# デコード処理
$subject =~ s/=\?ISO-2022-JP\?B\?([A-Za-z0-9\+\/=]*)\?=/ &base64decode($1) /eg;

sub base64decode {
	my $str  = shift;

	my $ret;
	my $buf;
	my $f;
	if (substr($str, -1) eq  '=') { $f=1; }
	if (substr($str, -2) eq '==') { $f=2; }
	for(my $i=0; $i<length($str); $i+=4) {
		$buf  = ($buf<<6) + $base64ary[ ord(substr($str,$i  ,1)) ];
		$buf  = ($buf<<6) + $base64ary[ ord(substr($str,$i+1,1)) ];
		$buf  = ($buf<<6) + $base64ary[ ord(substr($str,$i+2,1)) ];
		$buf  = ($buf<<6) + $base64ary[ ord(substr($str,$i+3,1)) ];
		$ret .= chr(($buf & 0xff0000)>>16) . chr(($buf & 0xff00)>>8) . chr($buf & 0xff);

	}
	if ($f>0) { chop($ret); }
	if ($f>1) { chop($ret); }
	return $ret;
}

ライセンス

修正BSDで。

NTT DOCOMOの周波数帯域(バンド)メモ

はてブ数 2000/03/11 電子::その他メモ

W-CDMA

  • FOMAエリア : Band 1(2.1GHz)
  • FOMAプラスエリア : Band 6(800MHz)
  • FOMAプラスエリア : Band 19(800MHz)

参考

LTE

  • Band 1(2.1GHz/112.5Mbps)
  • Band 21(1.5GHz/112.5Mbps) …… 日本独自で対応端末が少ない。
  • Band 28(700MHz) …… 2015年以降提供開始。
  • 東名阪バンド : Band 3(1.8GHz/150Mbps)
  • プラスエリア : Band 19(800MHz/75Mbps)

参考

歴代PCメモ

はてブ数 2000/03/01 メモPC

Pentium3 1GHz(Coppermine), CLE266

PEN3-1G(coppermine)-CLE266.png

Athlon XP2500, Radeon9600

athlon xp.png

CF-R6 / Core Duo U2400(1.06GHz), DDR2 1.5GB

CF-R6.png

AC電源接続時。

Athlon X2 BE-2350, ML115G1(nForce/NFP-3400), Radeon HD5450(DDR3/512MB)

RAM2G(single channel)
ml115g1-ram2g.png

RAM4G(dual channel) / VESA動作
ml115g1-ram4g.png

Athlon II X2 240e, AMD 785G (M4A785TD-M)

GPU700M_CPU2.8G-HT2G-MEM1.6G.png

HT2GHz / DDR3-1666。内蔵GPU:Radeon HD 4200

Core i3-530, Foxconn H55MXV, DDR3 1333MHz 2GB x 2

サーバマシンのため計測なし。
  • RAM : Cetus DCDDR3-4GB-1333
  • SSD : CSSD-S6T128NHG6Q(TOSHIBA THNSNJ128GCSU) 128GB
  • HDD : WD30EZRX 3TB x 3 (うち1台は定期バックアップで休止)
  • LAN : Realtek 8111DL
  • 29W(Linuxアイドル時)

Core i3 2100, GA-H67MA-D2H, DDR3 1333MHz 4GB x 2

Corei3 2100.png

A6-3670K, TA75M, DDR3 1600MHz(CL9) 4GB x 2

A6-3670K_3.2G.png

3.2GHz動作(定格2.7GHz)。Core i3よりメモリスコアが低い。
  • 内蔵GPU:Radeon HD 6350D
  • DQ10ベンチ 1280*720 標準画質 3340/1764(wine)

Core i5 3570K, H77M-ITX, SSD(Crucial m4 256GB)

Core-i5_3570K.png
crucial_m4_256GB.png

クロックは定格動作(電圧-0.15V)。SSDはファーム000F。
アイドル時24W、ベンチ時でも60Wぐらい。
  • CPU : 3.4GHz / 4core / Ivy Bridge
  • RAM : DDR3 W3U1333Q-4G CL9 4GB(1600/CL9動作) x 2
  • GPU:Intel HD4000
  • DQ10ベンチ 1280x720フルスクリーン 標準画質(2周目) 6944

CF-SZ6 / Core i5 7200U, SSD(Crucial MX300 525GB)

CF-SZ6.png
crucial_MX300_525GB.png

  • CPU : 2.5GHz / 2core / Kaby Lake-U
  • RAM : LPDDR3 8GB
  • SSD : CT525MX300SSD1
  • GPU : Intel HD Graphics 620
  • DQ10ベンチ 1280x720フルスクリーン 標準画質(2周目)
    • GPU電源プラン 省電力:5983 バランス:7393 最大:8159

電源のアイドル電流メモ

PS-ON(GNDと緑の線をショート)させた状態での消費電力メモ。
電源最大80PLUSアイドル電流
Antec EA-380D Green380W2W
Aopen AO300-08TE8(H360K-300BK付属)300W3W
Antec EA-380380W5W
SilentKing HK400-14GP400W-7W
SilentKing LW-6300H-2300W-9W
Aopen SL-8320BTX300W-10W
Delta 370W(@ML115)370W-11W
※EA-380Dの電源ファン「ADDA製 AD0812HS-A70GL 12V 0.25A」80mm角×25mm(仕様*1

*1 : 0.075Aファンは動作せず。0.1A前後がよさそう。

OK キャンセル 確認 その他