将unsigned long转换为char *

时间:2013-02-13 23:28:28

标签: c

所以我有这个功能:

static void doPrint (const char *s)
{
    write (STDOUT_FILENO, s, strlen(s));
}

我试图传递一个unsigned long变量,但到目前为止我没有尝试过。我的问题是,我该怎么做呢?我正在考虑使用_ultoa_s或其他类似功能的东西。

有什么想法吗?感谢

注意:访问printf,sprintf等是受限制的

3 个答案:

答案 0 :(得分:0)

您可以尝试将指针传递给long变量,并将大小传递给doPrint函数,如下所示

doPrint((char *)(&someLongVariable), sizeof(someLongvariable));

void doPrint(char *inpString, int size)
{
     write (STDOUT_FILENO, inpString, size);
}

答案 1 :(得分:0)

几乎可以肯定,您不希望将double传递给此函数。它希望输出文本,这是stdout的惯例。

几乎可以肯定,您首先需要在字符中表示double的值并将其传递给函数。这是一个复杂的主题,可能是练习的重点。 Google为"convert float to ascii"提供了有关您必须做的事情的一些想法。


跟进:

如果您被允许使用_ultoa_s,那么您当然可以致电fcvt() or ecvt()

答案 2 :(得分:0)

您没有提到“受限制”是否意味着您的(嵌入式?)平台上没有简单的功能(printf和朋友),或者这是对作业的限制。

无论如何,你所做的事永远不会奏效。您传入的是二进制变量(长整数),它不会自动转换为字符串。

查看此功能,找到here,一个紧凑的itoa功能。需要进行一些调整才能使其成为ltoa,但很容易看出它是如何工作的。

//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
    const unsigned int radix = 10;

    char* p;
    unsigned int a;        //every digit
    int len;
    char* b;            //start of the digit char
    char temp;
    unsigned int u;

    p = buf;

    if (val < 0)
    {
        *p++ = '-';
        val = 0 - val;
    }
    u = (unsigned int)val;

    b = p;

    do
    {
        a = u % radix;
        u /= radix;

        *p++ = a + '0';

    } while (u > 0);

    len = (int)(p - buf);

    *p-- = 0;

    //swap
    do
    {
        temp = *p;
        *p = *b;
        *b = temp;
        --p;
        ++b;

    } while (b < p);

    return len;
}