C 将无符号长字符转换为字符*

C 将无符号长字符转换为字符*,c,C,所以我有这个函数: static void doPrint (const char *s) { write (STDOUT_FILENO, s, strlen(s)); } 我试图给它传递一个无符号的长变量,但到目前为止,我所做的一切都不起作用。我的问题是,我该怎么做?我在考虑使用类似于ultoa或其他类似函数的东西 有什么想法吗?谢谢 注意:对printf、sprintf、ect的访问受到限制您可以尝试将指针传递给long变量,并将大小传递给doPrint函数,如下所示 doPrin

所以我有这个函数:

static void doPrint (const char *s)
{
    write (STDOUT_FILENO, s, strlen(s));
}
我试图给它传递一个无符号的长变量,但到目前为止,我所做的一切都不起作用。我的问题是,我该怎么做?我在考虑使用类似于ultoa或其他类似函数的东西

有什么想法吗?谢谢


注意:对printf、sprintf、ect的访问受到限制

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

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

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

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

几乎可以肯定,首先需要用字符表示double的值,并将其传递给函数。这是一个复杂的主题,可能也是本练习的重点。谷歌搜索一些关于你必须做什么的想法


后续行动:


如果您被允许使用
\u ultoa\u s
,那么您当然可以打电话。

您没有提到“受限”是否意味着简易功能(printf和friends)在您的(嵌入式?)平台上不可用,或者这是分配的限制

不管怎样,你所做的永远都不会成功。如果传入一个二进制变量(long),它不会自动转换为字符串

检查此函数,发现它是一个紧凑的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;
}
//返回结果字符串的长度。仅支持10个基数,使用方便,性能更佳
int my_itoa(int val,char*buf)
{
常量无符号整数基数=10;
char*p;
无符号int a;//每个数字
内伦;
char*b;//数字字符的开头
焦炭温度;
无符号整数u;
p=buf;
if(val<0)
{
*p++='-';
val=0-val;
}
u=(无符号整数)val;
b=p;
做
{
a=u%基数;
u/=基数;
*p++=a++'0';
}而(u>0);
len=(int)(p-buf);
*p--=0;
//交换
做
{
温度=*p;
*p=*b;
*b=温度;
--p;
++b;
}b
请参阅我的答案,了解我为什么否决这一点:OP需要大局的指导,而不一定是走错了路。