8

Pebble を手に入れたばかりで、SDK をいじっています。C は初めてですが、Objective-C は知っています。このようなフォーマットされた文字列を作成する方法はありますか?

int i = 1;
NSString *string = [NSString stringWithFormat:@"%i", i];

sprintfNO がないため、使用できませんmalloc

基本的に with を表示しintたいtext_layer_set_text(&countLayer, i);

4

2 に答える 2

2

私のお気に入りの 2 つの一般的な整数から文字列への関数は次のとおりです。1 つ目は基数 10 の整数を文字列に変換し、2 つ目は任意の基数 (例: 2 進数 (基数 2)、16 進数 (16)、10 進数 (8)、10 進数 (10)) に対応します。

/* simple base 10 only itoa */
char *
itoa10 (int value, char *result)
{
    char const digit[] = "0123456789";
    char *p = result;
    if (value < 0) {
        *p++ = '-';
        value *= -1;
    }

    /* move number of required chars and null terminate */
    int shift = value;
    do {
        ++p;
        shift /= 10;
    } while (shift);
    *p = '\0';

    /* populate result in reverse order */
    do {
        *--p = digit [value % 10];
        value /= 10;
    } while (value);

    return result;
}

任意の基数: ( http://www.strudel.org.uk/itoa/から取得)

/* preferred itoa - good for any base */
char *
itoa (int value, char *result, int base)
{
    // check that the base if valid
    if (base < 2 || base > 36) { *result = '\0'; return result; }

    char* ptr = result, *ptr1 = result, tmp_char;
    int tmp_value;

    do {
        tmp_value = value;
        value /= base;
        *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
    } while ( value );

    // Apply negative sign
    if (tmp_value < 0) *ptr++ = '-';
    *ptr-- = '\0';
    while (ptr1 < ptr) {
        tmp_char = *ptr;
        *ptr--= *ptr1;
        *ptr1++ = tmp_char;
    }
    return result;
}

ポインターを使用し、malloc を必要とする C 関数に依存せずに実行されるため、Pebble で機能しない理由がわかりました。しかし、私はペブルに慣れていません。

于 2014-06-09T20:15:58.153 に答える