saransk
03.10.2011 01:11 tkabber
$s="Привет из юникода";
$r="1055 1088 1080 1074 1077 1090 32 1080 1079 32 1102 1085 1080 1082 1086 1076 1072 ";
$char=0;
$byte=0;
for($q=0;$q<length($s);$q++){
$code=ord(substr($s,$q,1));
print d2b($code)." $code $byte\n";
if($byte==0){
$char=$code;
if($code<128){
print "$code\n";
next;
}
if($code<192||$code>253){
print "bad\n";
next;
}
if($code<224){
$len=2;
}
elsif($code<240){
$len=3;
}
elsif($code<248){
$len=4;
}
elsif($code<252){
$len=5;
}
elsif($code<254){
$len=6;
}
$byte++;
$char=(0x7F>>$len)&$code;
} else {
if(($code&0xC0)!=0x80){
print "bad #$byte\n";
$byte=0;
} else {
$char=($char<<6)|($code&0x3f);
$byte++;
if($byte==$len){
print "$char ".d2b($char)."\n";
$byte=0;
}
}
}
}
sub d2b{
return unpack("B32",pack("N",shift));
}