Java で、バイト列を文字列に変換・表示する方法

以下のメソッドを使えばよい。引数にバイト列 (byte[]) を与えると、そのバイト列を 16 進数表記に変換した文字列が返される。
public String byteToString(byte[] b) {

    StringBuffer s = new StringBuffer();
    for (int i = 0; i < b.length; i++) {

        int d = b[i];
        d += d < 0 ? 256 : 0; // byte 128-255
        if (d < 16) { //0-15 16
            s.append("0");
        }
        s.append(Integer.toString(d, 16));
    }
    return s.toString();
}
または、以下のようにしてもよい。
public String byteToString(byte[] b) {

    if (b == null || b.length <= 0) return null;
    byte ch = 0x00;
    String pseudo[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    StringBuffer s = new StringBuffer(b.length * 2);

    for(int i = 0; i < b.length; i++) {

        ch = (byte) (b[i] & 0xf0);
        ch = (byte) (ch >>> 4);
        ch = (byte) (ch & 0x0f);
        s.append(pseudo[(int) ch]);
        ch = (byte) (b[i] & 0x0f);
        s.append(pseudo[(int) ch]);
    }
    return s.toString();
}
以下のメソッドを使えばよい。引数にバイト列 (byte[]) を与えると、そのバイト列を 16 進数表記に変換した文字列が返される。
public String byteToString(byte[] b) {

    StringBuffer s = new StringBuffer();
    for (int i = 0; i < b.length; i++) {

        int d = b[i];
        d += d < 0 ? 256 : 0; // byte 128-255
        if (d < 16) { //0-15 16
            s.append("0");
        }
        s.append(Integer.toString(d, 16));
    }
    return s.toString();
}
または、以下のようにしてもよい。
public String byteToString(byte[] b) {

    if (b == null || b.length <= 0) return null;
    byte ch = 0x00;
    String pseudo[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    StringBuffer s = new StringBuffer(b.length * 2);

    for(int i = 0; i < b.length; i++) {

        ch = (byte) (b[i] & 0xf0);
        ch = (byte) (ch >>> 4);
        ch = (byte) (ch & 0x0f);
        s.append(pseudo[(int) ch]);
        ch = (byte) (b[i] & 0x0f);
        s.append(pseudo[(int) ch]);
    }
    return s.toString();
}
Posted on 2006-03-29 by yas |

PHP で、ファイルを読み込んで処理する方法

PHP で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、file('filename.txt') でファイルを読み込み、foreach で 1行ずつ処理する。
<?php

# 読み込むファイル名をここに書く
$INPUT_FILE = 'yourfile.txt';

# ファイルをオープンし、$lines に読みこむ。$lines は 「配列」 である。
$lines = file($INPUT_FILE);

# 配列 $lines は、 「$lines as $line」 と書くことによって 1行ずつ取り出せる。
foreach $lines as $line {

   
# 1行ずつ表示する
   
print $line;
}

?>
PHP で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、file('filename.txt') でファイルを読み込み、foreach で 1行ずつ処理する。
<?php

# 読み込むファイル名をここに書く
$INPUT_FILE = 'yourfile.txt';

# ファイルをオープンし、$lines に読みこむ。$lines は 「配列」 である。
$lines = file($INPUT_FILE);

# 配列 $lines は、 「$lines as $line」 と書くことによって 1行ずつ取り出せる。
foreach $lines as $line {

   
# 1行ずつ表示する
   
print $line;
}

?>
Posted on 2006-03-26 by yas |

Perl で、ファイルを読み込んで処理する方法

Perl で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、while() {...} のように書けばよい。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPUT_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理できる
while(<IN>) {

    # 1行ずつ表示する
    print $_; # 現在処理中の 1行は $_ で表わす。
}

# ファイルをクローズする
close(IN);
また、 の内容を 1行ずつ細かく処理するには、@IN = ; とするやり方も使える。以下はイテレータのループを while ではなく foreach で処理する例。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPU_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理する
@IN = <IN>;

# $INPUT_FILE の内容は @IN に入ったので、ここでファイルをクローズできる
close(IN);

foreach my $line (@IN) {

    # 1行ずつ表示する
    print $line; # 現在処理中の 1行は $line で表わす。
}
Perl で、改行で区切られたファイルを読み込んで、1行ずつ処理するには、while() {...} のように書けばよい。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPUT_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理できる
while(<IN>) {

    # 1行ずつ表示する
    print $_; # 現在処理中の 1行は $_ で表わす。
}

# ファイルをクローズする
close(IN);
また、 の内容を 1行ずつ細かく処理するには、@IN = ; とするやり方も使える。以下はイテレータのループを while ではなく foreach で処理する例。
#!/usr/bin/perl

# 読み込むファイル名をここに書く
our $INPU_FILE = 'yourfile.txt';

# ファイルをオープンする
open(IN, $INPUT_FILE) || die("Can't open a file: $!");

# 上の open で与えられた IN で、<IN> というように書き、while 文中で処理する
@IN = <IN>;

# $INPUT_FILE の内容は @IN に入ったので、ここでファイルをクローズできる
close(IN);

foreach my $line (@IN) {

    # 1行ずつ表示する
    print $line; # 現在処理中の 1行は $line で表わす。
}

ケータイサイト構築のポイント

以下に、ケータイのサイトを開発する上で、ケータイならではの考慮すべきポイントを簡単に挙げてみた(リンクはこのサイト内での技術情報)。
  1. ケータイからサーバに送られてくる、CGI 環境変数の UserAgent の種類(ブラウザ名)
  2. 各ケータイキャリア毎の IP アドレス(PC と連携するときに、ケータイからサイトにアクセスしてきたか、PC からアクセスしてきたかサーバ側で判別するのに必要)
  3. 各ケータイの機種ごとの画面サイズ(特に横幅、これは最近の機種であれば UserAgent から取得できる)
  4. サポートする画像形式(JPEG / PNG / GIF)
  5. 1 画面の最大受信サイズ(バイト数)
  6. 機種ごとに使えるカラーの違い
  7. 各キャリアの絵文字の違い(同一キャリアだとしても、ケータイの世代ごとに使える絵文字が違います)
  8. 各キャリアのメールアドレス体系(iモード / i-mode メールは RFC に準拠していません)
  9. 使える文字コード(シフトJIS、UTF-8 など)
  10. 使える文字の種類(全角、半角
  11. ケータイのキーパッドでも入力しやすくする工夫(PC にはない、アクセスキーの考え方のこと)
  12. ケータイネイティブ機能との連携(mailto: でメーラーが起動するとか、Java アプリが起動できるとか、tel: で電話の発信ができるとか)
  13. 公式サイトと勝手サイトの考え方、取得できる情報の違い
  14. セッション管理(ケータイは基本的に cookie が使えないから)
最近は、パケ放題などのプランが出てきたので以前ほどは、ページ内のパケットを減らす努力(改行はケータイに送らない、コメントは入れない、など)はしなくてもよくなってきたのではと思う。 このノウハウは、拙作の 「ケータイをシステム手帳にバージョンアップする」 サイト i-Services の構築から得られたノウハウである(このサイトのメインのターゲットはケータイだが、ケータイと PC 両方からアクセスできるように作ってあるので、両方で試してみて欲しい)。ノウハウとしては、かなり凝縮されている。
以下に、ケータイのサイトを開発する上で、ケータイならではの考慮すべきポイントを簡単に挙げてみた(リンクはこのサイト内での技術情報)。
  1. ケータイからサーバに送られてくる、CGI 環境変数の UserAgent の種類(ブラウザ名)
  2. 各ケータイキャリア毎の IP アドレス(PC と連携するときに、ケータイからサイトにアクセスしてきたか、PC からアクセスしてきたかサーバ側で判別するのに必要)
  3. 各ケータイの機種ごとの画面サイズ(特に横幅、これは最近の機種であれば UserAgent から取得できる)
  4. サポートする画像形式(JPEG / PNG / GIF)
  5. 1 画面の最大受信サイズ(バイト数)
  6. 機種ごとに使えるカラーの違い
  7. 各キャリアの絵文字の違い(同一キャリアだとしても、ケータイの世代ごとに使える絵文字が違います)
  8. 各キャリアのメールアドレス体系(iモード / i-mode メールは RFC に準拠していません)
  9. 使える文字コード(シフトJIS、UTF-8 など)
  10. 使える文字の種類(全角、半角
  11. ケータイのキーパッドでも入力しやすくする工夫(PC にはない、アクセスキーの考え方のこと)
  12. ケータイネイティブ機能との連携(mailto: でメーラーが起動するとか、Java アプリが起動できるとか、tel: で電話の発信ができるとか)
  13. 公式サイトと勝手サイトの考え方、取得できる情報の違い
  14. セッション管理(ケータイは基本的に cookie が使えないから)
最近は、パケ放題などのプランが出てきたので以前ほどは、ページ内のパケットを減らす努力(改行はケータイに送らない、コメントは入れない、など)はしなくてもよくなってきたのではと思う。 このノウハウは、拙作の 「ケータイをシステム手帳にバージョンアップする」 サイト i-Services の構築から得られたノウハウである(このサイトのメインのターゲットはケータイだが、ケータイと PC 両方からアクセスできるように作ってあるので、両方で試してみて欲しい)。ノウハウとしては、かなり凝縮されている。