Android Renderscript Строковые функции? - PullRequest
0 голосов
/ 03 июня 2011

Есть ли строковые функции в Renderscript?Как vsprintf, например?

В частности, я хотел бы преобразовать число с плавающей точкой в ​​строку.Должен ли я написать это с нуля?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Извините, вот лучше.Это будет работать и для целых чисел, но к ним добавлено ".000".

char stringBuffer[50];
static const int MAX_STRING_LENGTH = sizeof(stringBuffer) - 1;

void drawFloat(float value, int x, int y) {

    int index = 0;

    int scaledValue = (int)(value * 1000);

    index = MAX_STRING_LENGTH;
    stringBuffer[index] = 0;

    while(scaledValue > 0 || index > MAX_STRING_LENGTH - 4) {

        index--;

        if(index == MAX_STRING_LENGTH - 4) {
            stringBuffer[index--] = '.';
        }

        int digitValue = scaledValue % 10;

        stringBuffer[index] = '0' + digitValue;

        scaledValue /= 10;
    }

    if(value < 0) {
        stringBuffer[index--] = '-';
    }    

    rsgDrawText(&stringBuffer[index], x - 10, y + 5);
}
1 голос
/ 09 июня 2011

Не могу найти простой способ, так что ...

void drawInteger(int value, int x, int y) {

    char text[50] = "0";
    int index = 0;

    if(value != 0) {

        index = 49;
        text[index] = 0;

        while(value > 0) {

            index--;

            int digitValue = value % 10;

            text[index] = '0' + digitValue;

            value /= 10;
        }

        if(value < 0) {
            text[index--] = '-';
        }    
    }

    rsgDrawText(&text[index], x - 10, y + 5);
}

void drawFloat(float value, int x, int y) {

    char text[50] = "0.000";
    int index = 0;

    if(value != 0) {

        int integerPart = (int)(value * 1000);

        index = 49;
        text[index] = 0;

        while(integerPart > 0) {

            index--;

            if(index == 45) {
                text[index--] = '.';
            }

            int digitValue = integerPart % 10;

            text[index] = '0' + digitValue;

            integerPart /= 10;
        }

        if(value < 0) {
            text[index--] = '-';
        }    
    }

    rsgDrawText(&text[index], x - 10, y + 5);
}
...