所以我有这个功能:
static void doPrint (const char *s)
{
write (STDOUT_FILENO, s, strlen(s));
}
我正在尝试向它传递一个无符号长变量,但到目前为止我没有尝试过任何工作。我的问题是,我该怎么做呢?我正在考虑使用类似 _ultoa_s 或其他类似功能的东西。
有任何想法吗?谢谢
注意:对 printf、sprintf 等的访问受到限制
所以我有这个功能:
static void doPrint (const char *s)
{
write (STDOUT_FILENO, s, strlen(s));
}
我正在尝试向它传递一个无符号长变量,但到目前为止我没有尝试过任何工作。我的问题是,我该怎么做呢?我正在考虑使用类似 _ultoa_s 或其他类似功能的东西。
有任何想法吗?谢谢
注意:对 printf、sprintf 等的访问受到限制
您可以尝试将指针传递给 long 变量并将大小传递给您的doPrint
函数,如下所示
doPrint((char *)(&someLongVariable), sizeof(someLongvariable));
void doPrint(char *inpString, int size)
{
write (STDOUT_FILENO, inpString, size);
}
几乎可以肯定你不想将 a 传递double
给这个函数。它期望输出文本,这是stdout
.
几乎可以肯定,您首先需要用字符表示双精度值并将其传递给函数。这是一个复杂的话题,也可能是练习的重点。谷歌“将浮点数转换为 ascii”以了解您必须做什么的一些想法。
跟进:
如果您被允许使用_ultoa_s
,那么您当然可以调用fcvt()
或ecvt()
。
您没有提到“受限”是否意味着您的(嵌入式?)平台上不提供简单的功能(printf 和朋友),或者这是对分配的限制。
无论如何,你所做的永远不会奏效。您正在传递一个二进制变量(长),它不会自动转换为字符串。
看看这个函数,在这里找到,一个紧凑的 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;
}