标签: printf

如何进行64位十六进制/十进制算术并在HEX中输出一个完整的数字作为Perl中的字符串?

我需要用下面的大十六进制数做一些算术,但是当我尝试输出时,我得到溢出错误消息"十六进制数> 0xffffffff非可移植",有关不可移植的消息,或最大32位十六进制值FFFFFFFF.

所有这些都意味着标准语言和输出例程只能处理32位值.我需要64位值,并做了很多研究,但我没有发现BOTH启用算术AND以十六进制输出大数字.

my $result = 0x00000200A0000000 +
             ( ( $id & 0xFFFFF ) * 2 ) + ( ( $id / 0x100000 ) * 0x40000000 );
Run Code Online (Sandbox Code Playgroud)

因此,对于具有以下值的$ id,我应该得到$result:

$id = 0, $result = 0x00000200A0000000
$id = 1, $result = 0x00000200A0000002
$id = 2, $result = 0x00000200A0000004
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

以下是我不确定的研究结果,原因如下:

math perl 64-bit printf

6
推荐指数
1
解决办法
6229
查看次数

结构数组 - 删除/添加元素和打印

对于以下代码

struct orderSlip
{
    char source[64];
    char destination[64];
    char item[64];  
    int position;
};
//global
struct orderSlip data[100];
Run Code Online (Sandbox Code Playgroud)

除了以下方法之外,还有其他方法可以打印出每个元素的数据:

printf("%s\n",data[0].source);
    printf("%s\n",data[0].destination);
    printf("%s\n",data[0].item);
    printf("%i\n\n", data[0].position);

    printf("%s\n",data[1].source);
    printf("%s\n",data[1].destination);
    printf("%s\n",data[1].item);
    printf("%i\n", data[1].position);
Run Code Online (Sandbox Code Playgroud)

等等

for(int n = 0; n< 3; n++)
{
    printf("%s\n",data[n].source);
    printf("%s\n",data[n].destination);
    printf("%s\n",data[n].item);
    printf("%i\n\n", data[n].position);
}
Run Code Online (Sandbox Code Playgroud)

要删除和添加,我是否必须创建一个动态的结构数组?如果是这样,最简单的语法是什么?像这个c ++代码的东西

int * bobby;
bobby = new int [5];
delete bobby[5];
Run Code Online (Sandbox Code Playgroud)

但在C?我猜它与malloc和free有关

c arrays printf struct

6
推荐指数
1
解决办法
4万
查看次数

arm-none-eabi-gcc:使用printf打印浮点数

我正在为SAM3N arm cortex-M3微控制器编写一个C程序.当我尝试打印浮点数时,它只打印'f'.示例:仅printf("%f",43.12);打印f,而不是43.12.

但用整数打印效果很好.

如何启用浮动的完整打印?我知道默认情况下,编译器禁用浮动打印以减少代码大小(即看起来,它们链接了缩减版本).另请注意,CFLAGS=-Dprintf=iprintfmakefile中没有使用.

工具详情:

  • ARM/GNU C编译器:(crosstool-NG 1.13.1 - Atmel build:13)4.6.1
  • 以上工具附带Atmel studio 6.0.

c printf gcc arm

6
推荐指数
2
解决办法
1万
查看次数

在C中使用printf添加

在网上:使用printf添加两个数字(不使用任何运算符),如下所示:

main()
{
    printf("Summ = %d",add(10,20))
    return 0;
}

int add(int x,int y)
{   
    return printf("%*d%*d",x,' ',y,' ');
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释,这是如何工作的:

return printf("%*d%*d",x,' ',y,' ');
Run Code Online (Sandbox Code Playgroud)

注意:当我称之为"sum"时,这会失败,如下所示:

sum(1,1) or sum(3,-1) 
Run Code Online (Sandbox Code Playgroud)

c math printf

6
推荐指数
2
解决办法
6753
查看次数

使用printf打印double的可变位数

任何人都知道是否可以使用printf打印VARIABLE位数?

以下代码行正好打印2:

printf("%.2lf", x);
Run Code Online (Sandbox Code Playgroud)

但是我要说我有一个变量:

int precision = 2;
Run Code Online (Sandbox Code Playgroud)

有没有办法在printf中使用它来指定位数?

否则我将不得不写一个'switch'或'if'结构.

谢谢

c printf

6
推荐指数
2
解决办法
5781
查看次数

仅带有std :: string的C ++变量参数

我正在尝试创建一个函数,该函数采用可变数量的std :: string参数并使用它格式化字符串。

例:

Test::formatLine(const string::format, ...)
{
    const std::string buffer;
va_list args;
va_start(args, format);
vsprintf(buffer.c_str, format.c_str, args);
va_end(args);
cout << buffer << endl;
}
Run Code Online (Sandbox Code Playgroud)

编译此代码段错误:

Error   1   error C3867: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str': function call missing argument list; use '&std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str' to create a pointer to member
Run Code Online (Sandbox Code Playgroud)

我要实现的目标:

Test t = Test();
t.formatLine("Hello %s!", "monsieur");
Run Code Online (Sandbox Code Playgroud)

应该打印 Hello monsieur!

t.formatLine("Hello %s %s! How %s you today?", "good", "sir", "are");
Run Code Online (Sandbox Code Playgroud)

应该打印 Hello good sir! How are you today?

它甚至有可能使用va_list,并vsprintf与std::string只,避免 …

printf variadic-functions stdstring c++11

6
推荐指数
2
解决办法
1万
查看次数

如何使用printf在字符串中打印多个变量?

我想找到两个数字的最大值,然后打印出来.我想要打印所有三个数字.我使用以下代码.

#include<stdio.h>
#include<conio.h>
main()
{
     //clrscr();
     int a,b,c;
     printf("insert two numbers:");
     scanf("%d%d", &a, &b);
     c = (a>b) ? a : b;
     printf("\nmaximum of %d",a," and %d",b,"  is = %d" c);
     getch();

}
Run Code Online (Sandbox Code Playgroud)

但是,我收到两个语法错误(请参见附图).有人可以帮帮我吗?

c printf syntax-error

6
推荐指数
2
解决办法
7万
查看次数

printf()由gcc检查的包装器参数

当C printf()及其系列由命令行编译gcc并-Wall在命令行上使用时,编译器会根据正在使用的格式字符串警告错误的参数.作为一个例子,下面的代码会得到一条错误消息,说明格式指定了3个参数,但实际上你只传递了两个.

printf("%d%d%d", 1, 2);
Run Code Online (Sandbox Code Playgroud)

在编写包装器时printf(),如何保留此功能?一种功能或宏的形式将是我能想到的.但是简单的解析器也是可以接受的.

可以在stackoverflow上找到编写printf包装器的几种方法.两种常见的方法是使用vprintf和varargs,并使用__builtin_apply.我试过这两种方法,都没有用.

c printf gcc warnings wrapper

6
推荐指数
1
解决办法
1366
查看次数

用printf显示宽字符

我试图理解printf如何使用宽字符(wchar_t).

我做了以下代码示例:

样本1:

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 42;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

输出:

*
Run Code Online (Sandbox Code Playgroud)

这里一切都很好:我的字符(*)被正确显示.

样本2:

我想展示另一种角色.在我的系统上,wchar_t似乎编码为4个字节.所以我试着显示以下字符: É

#include <stdio.h>
#include <stdlib.h>

int     main(void)
{
    wchar_t     *s;

    s = (wchar_t *)malloc(sizeof(wchar_t) * 2);
    s[0] = 0xC389;
    s[1] = 0;
    printf("%ls\n", s);
    free(s);
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

但这次没有输出,我尝试使用"编码"部分(参见上一个链接)中的许多值s[0](0xC389,201,0xC9)...但我从未得到过É显示的字符.我也试过%S而不是%ls.

如果我尝试像这样调用printf:printf("<%ls>\n", …

c encoding printf widechar

6
推荐指数
2
解决办法
7284
查看次数

为什么Haskell要求数字为printf消除歧义而不是show?

为什么printf "%d\n" 3暧昧而不是show 3?是否printf可以重写模块以提供自动消除歧义?据推测,show必须在较低层次上完成printf......或者是否存在一些重要的区别printf,show这需要消除数字的歧义?

如果printf 可以重写以自动处理数字而不明确消除歧义,那么正在show做什么?如何在show不:: Int消除歧义的情况下将数字转换为字符串printf?

这是show(没有消除歧义)的正确操作以及printf(消除歧义)的正确操作:

$ cat printStrLnShow3
import Text.Printf
main = putStrLn (show 3)
$ runghc printStrLnShow3
3
$ cat printfWithInt3
import Text.Printf
main = printf "%d\n" (3 :: Int)
$ runghc printfWithInt3
3
Run Code Online (Sandbox Code Playgroud)

这里是不明确的变量时,错误printf也没有歧义的数量:

$ cat printfWithAmbiguous3
import Text.Printf
main = …
Run Code Online (Sandbox Code Playgroud)

printf haskell types hindley-milner type-signature

6
推荐指数
1
解决办法
158
查看次数