Java で、2 バイトから正の整数を作る方法

例えばネットワーク越しのデータのやり取りとかで、'01c0' というバイト列があったとする。そしてこの 2 バイトが続くバイト列の長さを表わしいてるような場合の処理を考える。01c0 は、2バイトで
0x01c0 = 0x0100 + 0xc0 = 256 + 192 = 448
を表すとする。
byte[] b = {0x01, 0xc0};  // 例えば、この場合、256 + 192 = 448 となる。
int length = ((b[0] & 0xff) << 8 ) + (b[1] & 0xff);
例えばネットワーク越しのデータのやり取りとかで、'01c0' というバイト列があったとする。そしてこの 2 バイトが続くバイト列の長さを表わしいてるような場合の処理を考える。01c0 は、2バイトで
0x01c0 = 0x0100 + 0xc0 = 256 + 192 = 448
を表すとする。
byte[] b = {0x01, 0xc0};  // 例えば、この場合、256 + 192 = 448 となる。
int length = ((b[0] & 0xff) << 8 ) + (b[1] & 0xff);
Posted on 2006-04-01 by yas |

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 で表わす。
}