MK254
JF-Expert Member
- May 11, 2013
- 33,480
- 53,342
Poleni kwa majukumu coders wenzangu, hapa nina tatizo ambalo linanizingua na ninahitaji a second eye kutoka kwenu. Natumaini Kiswahili changu cha Kenya kitaeleweka.
Kuna mradi ninaofanya na nahitajika kutumia SMS kubeba payload. Tatizo kama tujuavyo SMS huwa limit yake ni 161 characters hivyo siwezi nikasafirisha bytes za kutosha.
Sasa imenilazimu kutumia mfumo wa CODE3TO4 ambao unaniwezesha kupunguza kila byte inabeba 6 bits badala ya kawaida 8 bits. Kwa ufupi, ujumbe mmoja wa SMS ukiwa encoded na huu mfumo unakuwezesha kubeba payload kubwa ambayo haingewezekana.
kwa mfano tu, ujumbe kama huu wa SMS - ######E*####################kGw#####FJJ#####5E
Ukiwa parsed unakupa HEX zifuatazo - 63 73 4c 30 30 30 31 30 35 35 32 30 39 39 0 32 43 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 b0 c4 3 0 0 0 51 55 1 0 0 XX Hapo ni pamoja na checksum.
Sasa tatizo langu lipo kwenye code, nimefaulu na kila kitu kimeenda sawa kwa muda, lakini ghafla na intermittently imekua iki-misbehave, unakuta payload niliyotegemea siyo yaani baada ya kuwa parsed, ilhali sijabadilisha chochote kwenye logics.
Hebu muitazame code yangu hii hapa.
Kuna mradi ninaofanya na nahitajika kutumia SMS kubeba payload. Tatizo kama tujuavyo SMS huwa limit yake ni 161 characters hivyo siwezi nikasafirisha bytes za kutosha.
Sasa imenilazimu kutumia mfumo wa CODE3TO4 ambao unaniwezesha kupunguza kila byte inabeba 6 bits badala ya kawaida 8 bits. Kwa ufupi, ujumbe mmoja wa SMS ukiwa encoded na huu mfumo unakuwezesha kubeba payload kubwa ambayo haingewezekana.
kwa mfano tu, ujumbe kama huu wa SMS - ######E*####################kGw#####FJJ#####5E
Ukiwa parsed unakupa HEX zifuatazo - 63 73 4c 30 30 30 31 30 35 35 32 30 39 39 0 32 43 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 b0 c4 3 0 0 0 51 55 1 0 0 XX Hapo ni pamoja na checksum.
Sasa tatizo langu lipo kwenye code, nimefaulu na kila kitu kimeenda sawa kwa muda, lakini ghafla na intermittently imekua iki-misbehave, unakuta payload niliyotegemea siyo yaani baada ya kuwa parsed, ilhali sijabadilisha chochote kwenye logics.
Hebu muitazame code yangu hii hapa.
Code:
//load 3to4 encoding first
$handle = @fopen("3to4.txt", "r");
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
$buffer = explode(',',$buffer);
$_3to4[$buffer[0]] = trim($buffer[1]);
}
if (!feof($handle)) {
die("Error: unexpected fgets() fail");
}
fclose($handle);
}
$sms_text = "##AQypz3ujYRvyyal*#IQE############wzv1##0F";
//Divide into groups of 4 bytes each
$dat = str_split($sms_text,4);
//loop through the bytes
foreach($dat as $d){
//convert into array and reverse
$b = array_reverse(str_split($d));
$flipped_3to4 .= implode($b)." ";
//convert each element into hex using 3to4
foreach($b as $a){
$hex_val = array_search($a,$_3to4);
if($hex_val >'' || $hex_val ==0){
$bin_str .= str_pad(base_convert($hex_val,'16','2'),6,"0",STR_PAD_LEFT);
}else{
$missing .= $a;
}
}
$hex_str = str_pad(base_convert($bin_str,'2','16'),6,"0",STR_PAD_LEFT);
$raw .= $hex_str;
//then flip back
$hex_ar = str_split($hex_str,2);
foreach($hex_ar as $h){
//reverse for least significant byte
$str .= strrev($h)." ";
}
$hex_str .= strrev($str);
//clear vars
$hex_str = '';
$bin_str = '';
$str = '';
}
echo $hex_str;