我试图使用bit16
整数来表示数字的unsigned
表示(浮点表示)。这里的分数字段偏离10的标准,是8位 - 暗示指数字段是7位,符号是1位。
我的代码如下:
bit16 float_16(bit16 sign, bit16 exp, bit16 frac) {
//make the sign the number before binary point, make the fraction binary.
//concatenate the sign then exponent then fraction
//
bit16 result;
int theExponent;
theExponent = exp + 63; // bias = 2^(7-1) + 1 = 2^6 + 1 = 63
//printf("%d",sign);
int c, k;
for(c = 6; c > 0; c--)
{
k = theExponent >> c;
if( k & 1)
printf("1");
else
printf("0");
}
for(c = 7; c >= 0; c--)
{
k = frac >> c;
if( k & 1)
printf("1");
else
printf("0");
}
//return result;
}
我的想法是'重新创造''这些字段中的16 bit
序列是将它们连接在一起,但是如果我想在另一个应用程序中使用它们,我无法这样做。有没有办法在将所有内容(16-bit
序列)打印到变量后存储最终结果,然后可以将其表示为无符号整数?或者有更优化的方法来执行此过程吗?
答案 0 :(得分:1)
虽然printf
在这种情况下不起作用(您无法'存储'它的结果),但您可以使用sprintf
。
int sprintf ( char * output_str, const char * format, ... );
sprintf
将格式化数据写入字符串
如果在printf
上使用了格式,则使用相同的文本编写一个字符串,但不是打印(或显示在控制台上),而是将内容存储为指向缓冲区中的C字符串output_str
。
缓冲区的大小应足够大,以包含整个结果字符串。请参阅Buffer Overflow。
终止空字符(\0
)将自动附加在output_str
的末尾。
从output_str
到整数变量
您可以使用atoi
功能执行此操作。你可以用这样的整数变量得到你的答案:
int i = atoi (output_str);