Kotlin >> PHP ?

Odpowiedz Nowy wątek
2019-01-01 16:18
Trzeźwy Rycerz
0

Cześć.
Można jakoś przetłumaczyć skrypt z języka KOTLIN na PHP ?
Z "ketchapem" wcześniej nie miałem nic wspólnego.. nie wiem za bardzo jak za to się zabrać
Jak próbowałem to wychodzą mi całkiem inne wyniki niż w "ketchapie"
skrypt który tłumaczę z githuba

import java.io.ByteArrayOutputStream

class PoiOutputStream : ByteArrayOutputStream() {

    var position: Int
        get() = count
        set(value) {
            count = position
        }

    fun writeIndex(index: Int, value: Int): Int {
        val oldSize = size()
        count = index
        writeSwapInt(value)
        val newSize = size()
        count = oldSize
        return newSize
    }

    fun writeSpecialStringWthLength(text: String) {
        val bytes = text.toByteArray(charset("utf-8"))
        if (bytes.size > text.length) {
            write(15)
        } else {
            write(0)
        }
        writeSwapInt(bytes.size or Integer.MIN_VALUE)
        write(bytes)
    }

    fun writeCodePointCount(str: String) {
        var count = 0
        val codePointCount = str.codePointCount(0, str.length)
        for (position in 0 until codePointCount) {
            count = combine(count, str.codePointAt(position))
        }
        writeSwapInt(count)
    }

    fun writeStringWithLength(text: String) {
        val bytes = text.toByteArray(charset("utf-8"))
        writeSwapInt(bytes.size or Integer.MIN_VALUE)
        write(bytes)
    }

    fun writeUnicodeString(text: String) {
        for (i in 0 until text.length) {
            writeSwapShort(text.codePointAt(i))
        }
    }

    fun writeString(t: String) {
        write(t.toByteArray(Charsets.UTF_8))
    }

    fun writeSwapShort(value: Int) {
        write(value)
        write(value.ushr(8))
    }

    fun writeSwapInt(value: Int) {
        write(value)
        write(value.ushr(8))
        write(value.ushr(16))
        write(value.ushr(24)
        )
    }

    fun writeInt(value: Int) {
        write(value.ushr(24))
        write(value.ushr(16))
        write(value.ushr(8))
        write(value)
    }

    private fun combine(val1: Int, val2: Int): Int {
        val val3 = val1 shl 8
        return (val3 and 0xFFFFFFF) + val2 xor (-0x10000000 and val3).ushr(24)
    }

    fun writeBoundingBox(boundingBox: BoundingBox) {
        writeSwapInt(boundingBox.minLonInt - 1)
        writeSwapInt(boundingBox.maxLatInt + 1)
        writeSwapInt(boundingBox.maxLonInt + 1)
        writeSwapInt(boundingBox.minLatInt - 1)
    }
}

KOD PHP

<?php
class POISygic {

    static function combine($val1, $val2) {
        // shl? 
        #val val3 = val1 shl 8
        $val3 = $int1 << 8;
        #return (val3 and 0xFFFFFFF) + val2 xor (-0x10000000 and val3).ushr(24)
        return ($val3 and 0xFFFFFFF) + $val2 ^ (-0x10000000 and $val2);
    }

    static function writeCodePointCount($string) {
        $count = 0;
        $codePointCount = strlen($string);

        for($position = 0; $position < $codePointCount; $position++) {
            $count = self::combine($count, self::codePoinAt($string, $position));
        }

        self::writeSwapInt($count); //
    }

    static function writeSwapInt($int) {
        //tutaj nie wiem jaki jest odpowiednik funkcji `ushr` w PHP
        #write(value) <- nie udało mi się również ustalić która fukcja obsługuje to.
        #write(value.ushr(8))
        #write(value.ushr(16))
        #write(value.ushr(24))
        //self::write(...);
    }

    static function writeSpecialStringWthLength($text) {
        #val bytes = text.toByteArray(charset("utf-8"))
        $byte = unpack('C*', utf8_encode($text));

        if(mb_strlen($byte) > strlen($text)) {
            #write(15);
            self::write(15);
        } else {
            #write(0);
            self::write(0);
        }
    }
    static function writeUnicodeString($text) {
        for($i = 0; $i < strlen(text); $i++) {
            self::writeSwapShort(self::codePointAt($text, $i));
        }
    }

    static function codePointAt($string, $index) {
        // Tu jest OK.
        if(($index < 0) OR ($index > strlen($string))) {
            die("Index jest błędny!")
        }
        return substr($string, $index, 1);
    }

    static function writeString($string) {
        self::write(unpack('C*', utf8_encode($string)));
    }

    static function writeStringWithLength($string) {
        #val bytes = text.toByteArray(charset("utf-8"))
        $bytes = unpack('C*', utf8_encode($string));

        #writeSwapInt(bytes.size or Integer.MIN_VALUE) / Integer.MIN_VALUE <- jest w pliku 'PoiBlock.kt'

        self::writeSwapInt(strlen($byte) OR self::MIN_VALUE);
        self::write($bytes);
    }
}
?>

Pozostało 580 znaków

2019-01-01 17:09
Scala Dev
0

Można z Kotlina na JS, a potem próbuj JS na PHP. Raczej programista PHP zna już dobrze JS.

Pozostało 580 znaków

2019-01-01 21:12
Trzeźwy Rycerz
0

Chyba racja. Może uda się zdobyć podpowiedź czym zastąpić funkcje ushr oraz shl w PHPie.

a shl to shift left ? znaczy integer * 2? - Miang 2019-01-05 13:19

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0