精华内容
下载资源
问答
  • 转换
    万次阅读 多人点赞
    2021-04-20 18:41:34

    C++ 类型转换(C风格的强制转换):

    在C++基本的数据类型中,可以分为四类:整型,浮点型,字符型,布尔型。其中数值型包括 整型与浮点型;字符型即为char。

    (1)将浮点型数据赋值给整型变量时,舍弃其小数部分。

    (2)将整型数据赋值给浮点型变量时,数值不变,但是以指数形式存储。

    (3)将double型数据赋值给float型变量时,注意数值范围溢出。

    (4)字符型数据可以赋值给整型变量,此时存入的是字符的ASCII码。

    (5)将一个int,short或long型数据赋值给一个char型变量,只将低8位原封不动的送到char型变量中。 
    (6)将有符号型数据赋值给长度相同的无符号型变量,连同原来的符号位一起传送。

     

    C++强制类型转换:

    在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。

    新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。

    C++中风格是static_cast<type>(content)。C++风格的强制转换其他的好处是,它们能更清晰的表明它们要干什么。程序员只要扫一眼这样的代码,就能立即知道一个强制转换的目的。 

     

    1) static_cast

    在C++语言中static_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。例如将整型数据转换为浮点型数据。
    [例1]C语言所采用的类型转换方式:

    int a = 10;
    int b = 3;
    double result = (double)a / (double)b;

    例1中将整型变量a和b转换为双精度浮点型,然后相除。在C++语言中,我们可以采用static_cast关键字来进行强制类型转换,如下所示。
    [例2]static_cast关键字的使用:

    int a = 10;
    int b = 3;
    double result = static_cast<double>(a) / static_cast<double>(b);

    在本例中同样是将整型变量a转换为双精度浮点型。采用static_cast进行强制数据类型转换时,将想要转换成的数据类型放到尖括号中,将待转换的变量或表达式放在元括号中,其格式可以概括为如下形式:    

    用法:static_cast <类型说明符> (变量或表达式)

    它主要有如下几种用法:
        (1)用于类层次结构中基类和派生类之间指针或引用的转换
          进行上行转换(把派生类的指针或引用转换成基类表示)是安全的
          进行下行转换(把基类的指针或引用转换为派生类表示),由于没有动态类型检查,所以是不安全的
        (2)用于基本数据类型之间的转换,如把int转换成char。这种转换的安全也要开发人员来保证
        (3)把空指针转换成目标类型的空指针
        (4)把任何类型的表达式转换为void类型
        注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性。

    static_cast:可以实现C++中内置基本数据类型之间的相互转换。

    如果涉及到类的话,static_cast只能在有相互联系的类型中进行相互转换,不一定包含虚函数。

     

    2) const_cast

    在C语言中,const限定符通常被用来限定变量,用于表示该变量的值不能被修改。

    而const_cast则正是用于强制去掉这种不能被修改的常数特性,但需要特别注意的是const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。

    用法:const_cast<type_id> (expression)
        该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
        常量指针被转化成非常量指针,并且仍然指向原来的对象;
        常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。

    [例3]一个错误的例子:

    const int a = 10;
    const int * p = &a;
    *p = 20;                  //compile error
    int b = const_cast<int>(a);  //compile error

    在本例中出现了两个编译错误,第一个编译错误是*p因为具有常量性,其值是不能被修改的;另一处错误是const_cast强制转换对象必须为指针或引用,而例3中为一个变量,这是不允许的!

    [例4]const_cast关键字的使用

    #include<iostream>
    using namespace std;
    
    
    int main()
    {
        const int a = 10;
    
        const int * p = &a;
    
        int *q;
    
        q = const_cast<int *>(p);
    
        *q = 20;    //fine
    
        cout <<a<<" "<<*p<<" "<<*q<<endl;
    
            cout <<&a<<" "<<p<<" "<<q<<endl;
    
        return 0;
    }

    在本例中,我们将变量a声明为常量变量,同时声明了一个const指针指向该变量(此时如果声明一个普通指针指向该常量变量的话是不允许的,Visual Studio 2010编译器会报错)。

     

    之后我们定义了一个普通的指针*q。将p指针通过const_cast去掉其常量性,并赋给q指针。之后我再修改q指针所指地址的值时,这是不会有问题的。

    最后将结果打印出来,运行结果如下:
    10 20 20
    002CFAF4 002CFAF4 002CFAF4

    查看运行结果,问题来了,指针p和指针q都是指向a变量的,指向地址相同,而且经过调试发现002CFAF4地址内的值确实由10被修改成了20,这是怎么一回事呢?为什么a的值打印出来还是10呢?

    其实这是一件好事,我们要庆幸a变量最终的值没有变成20!变量a一开始就被声明为一个常量变量,不管后面的程序怎么处理,它就是一个常量,就是不会变化的。试想一下如果这个变量a最终变成了20会有什么后果呢?对于这些简短的程序而言,如果最后a变成了20,我们会一眼看出是q指针修改了,但是一旦一个项目工程非常庞大的时候,在程序某个地方出现了一个q这样的指针,它可以修改常量a,这是一件很可怕的事情的,可以说是一个程序的漏洞,毕竟将变量a声明为常量就是不希望修改它,如果后面能修改,这就太恐怖了。

    在例4中我们称“*q=20”语句为未定义行为语句,所谓的未定义行为是指在标准的C++规范中并没有明确规定这种语句的具体行为,该语句的具体行为由编译器来自行决定如何处理。对于这种未定义行为的语句我们应该尽量予以避免!

    从例4中我们可以看出我们是不想修改变量a的值的,既然如此,定义一个const_cast关键字强制去掉指针的常量性到底有什么用呢?我们接着来看下面的例子。

    例5:

    #include<iostream>
    using namespace std;
    
    const int * Search(const int * a, int n, int val);
    
    int main()
    
    {
    
        int a[10] = {0,1,2,3,4,5,6,7,8,9};
    
        int val = 5;
    
        int *p;
    
        p = const_cast<int *>(Search(a, 10, val));
    
        if(p == NULL)
    
            cout<<"Not found the val in array a"<<endl;
    
        else
    
            cout<<"hvae found the val in array a and the val = "<<*p<<endl;
    
        return 0;
    
    }
    
    const int * Search(const int * a, int n, int val)
    
    {
    
        int i;
    
        for(i=0; i<n; i++)
    
        {
    
            if(a[i] == val)
    
                return &a[i];
    
        }
    
        return  NULL;
    
    }

    在例5中我们定义了一个函数,用于在a数组中寻找val值,如果找到了就返回该值的地址,如果没有找到则返回NULL。函数Search返回值是const指针,当我们在a数组中找到了val值的时候,我们会返回val的地址,最关键的是a数组在main函数中并不是const,因此即使我们去掉返回值的常量性有可能会造成a数组被修改,但是这也依然是安全的。

    对于引用,我们同样能使用const_cast来强制去掉常量性,如例6所示。

    例6:

    #include<iostream>
    using namespace std;
    const int & Search(const int * a, int n, int val);
    
    int main()
    
    {
    
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    
    int val = 5;
    
    int &p = const_cast<int &>(Search(a, 10, val));
    
    if(p == NULL)
    
    cout<<"Not found the val in array a"<<endl;
    
    else
    
    cout<<"hvae found the val in array a and the val = "<<p<<endl;
    
    return 0;
    
    }
    
    
    const int & Search(const int * a, int n, int val)
    
    {
    
    int i;
    
    for(i=0; i<n; i++)
    
    {
    
    if(a[i] == val)
    
    return a[i];
    
    }
    
    return NULL;
    
    }

     了解了const_cast的使用场景后,可以知道使用const_cast通常是一种无奈之举,同时也建议大家在今后的C++程序设计过程中一定不要利用const_cast去掉指针或引用的常量性并且去修改原始变量的数值,这是一种非常不好的行为。

     

    3) reinterpret_cast

    在C++语言中,reinterpret_cast主要有三种强制转换用途:改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型

    用法:reinterpret_cast<type_id> (expression)
        type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。
        它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
        在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝,因此在使用过程中需要特别谨慎!

    例7:

    int *a = new int;
    double *d = reinterpret_cast<double *>(a);

    在例7中,将整型指针通过reinterpret_cast强制转换成了双精度浮点型指针。

    reinterpret_cast可以将指针或引用转换为一个足够长度的整形,此中的足够长度具体长度需要多少则取决于操作系统,如果是32位的操作系统,就需要4个字节及以上的整型,如果是64位的操作系统则需要8个字节及以上的整型。 

     

    4) dynamic_cast

     用法:dynamic_cast<type_id> (expression)

     

    (1)其他三种都是编译时完成的,dynamic_cast是运行时处理的,运行时要进行类型检查。

    (2)不能用于内置的基本数据类型的强制转换。

    (3)dynamic_cast转换如果成功的话返回的是指向类的指针或引用,转换失败的话则会返回NULL。

    (4)使用dynamic_cast进行转换的,基类中一定要有虚函数,否则编译不通过。

            B中需要检测有虚函数的原因:类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。

            这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表(关于虚函数表的概念,详细可见<Inside c++ object model>)中,

            只有定义了虚函数的类才有虚函数表。

     (5)在类的转换时,在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的。在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

            向上转换,即为子类指针指向父类指针(一般不会出问题);向下转换,即将父类指针转化子类指针。

           向下转换的成功与否还与将要转换的类型有关,即要转换的指针指向的对象的实际类型与转换以后的对象类型一定要相同,否则转换失败。

            在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。

     

    例1:

    #include<iostream>
    
    using namespace std;
    
     
    
    class base
    
    {
    
    public :
    
        void m(){cout<<"m"<<endl;}
    
    };
    
    
    class derived : public base
    {
    public:
    
        void f(){cout<<"f"<<endl;}
    
    };
    
    int main()
    
    {
    
        derived * p;
    
        p = new base;
    
        p = static_cast<derived *>(new base);
    
        p->m();
    
        p->f();
    
        return 0;
    
    }

    本例中定义了两个类:base类和derived类,这两个类构成继承关系。在base类中定义了m函数,derived类中定义了f函数。在前面介绍多态时,我们一直是用基类指针指向派生类或基类对象,而本例则不同了。

    本例主函数中定义的是一个派生类指针,当我们将其指向一个基类对象时,这是错误的,会导致编译错误。

    但是通过强制类型转换我们可以将派生类指针指向一个基类对象,p = static_cast<derived *>(new base);语句实现的就是这样一个功能,这样的一种强制类型转换时合乎C++语法规定的,但是是非常不明智的,它会带来一定的危险。

    在程序中p是一个派生类对象,我们将其强制指向一个基类对象,首先通过p指针调用m函数,因为基类中包含有m函数,这一句没有问题,之后通过p指针调用f函数。一般来讲,因为p指针是一个派生类类型的指针,而派生类中拥有f函数,因此p->f();这一语句不会有问题,但是本例中p指针指向的确实基类的对象,而基类中并没有声明f函数,虽然p->f();这一语句虽然仍没有语法错误,但是它却产生了一个运行时的错误。换言之,p指针是派生类指针,这表明程序设计人员可以通过p指针调用派生类的成员函数f,但是在实际的程序设计过程中却误将p指针指向了一个基类对象,这就导致了一个运行期错误。

    产生这种运行期的错误原因在于static_cast强制类型转换时并不具有保证类型安全的功能,而C++提供的dynamic_cast却能解决这一问题,dynamic_cast可以在程序运行时检测类型转换是否类型安全。

    当然dynamic_cast使用起来也是有条件的,它要求所转换的操作数必须包含多态类类型(即至少包含一个虚函数的类)。

    例2:

    #include<iostream>
    using namespace std;
    
    class base
    
    {
    
    public :
    
        void m(){cout<<"m"<<endl;}
    
    };
    
    class derived : public base
    
    {
    public:
    
        void f(){cout<<"f"<<endl;}
    
    };
    
    
    int main()
    {
    
        derived * p;
    
        p = new base;
    
        p = dynamic_cast<derived *>(new base);
    
        p->m();
    
        p->f();
    
        return 0;
    }

    在本例中利用dynamic_cast进行强制类型转换,但是因为base类中并不存在虚函数,因此p = dynamic_cast<derived *>(new base);这一句会编译错误。

    为了解决本例中的语法错误,我们可以将base类中的函数m声明为虚函数,virtual void m(){cout<<"m"<<endl;}。

    dynamic_cast还要求<>内部所描述的目标类型必须为指针或引用。

    例3:

    #include<iostream>
    #include<cstring>
    using namespace std;
     
     
    class A
    {
    public:
       virtual void f()
       {
           cout<<"hello"<<endl;
     
           };
     
    };
     
     
    class B:public A
    {
    public:
     
        void f()
        {
            cout<<"hello2"<<endl;
        } 
    };
     
     
    class C
    {
      void pp()
      {
          return;
      }
     
    };
     
    int fun()
    {
        return 1;
    }
     
    int main()
    {
        A* a1=new B;//a1是A类型的指针指向一个B类型的对象
     
        A* a2=new A;//a2是A类型的指针指向一个A类型的对象
     
        B* b;
     
        C* c;
     
        b=dynamic_cast<B*>(a1);//结果为not null,向下转换成功,a1之前指向的就是B类型的对象,所以可以转换成B类型的指针。
     
        if(b==NULL)
        {
            cout<<"null"<<endl;
        }
        else
        {
     
            cout<<"not null"<<endl;
     
        }
     
        b=dynamic_cast<B*>(a2);//结果为null,向下转换失败
     
        if(b==NULL)
        {
            cout<<"null"<<endl;
     
        }
        else
        {
            cout<<"not null"<<endl;
        }
     
     
        c=dynamic_cast<C*>(a);//结果为null,向下转换失败
     
        if(c==NULL)
     
        {
            cout<<"null"<<endl;
        }
        else
        {
            cout<<"not null"<<endl;
     
        }
     
        delete(a);
        return 0;
    }

     

    更多相关内容
  • 网易云音乐NCM格式转换

    热门讨论 2018-09-18 10:05:46
    由于积分太高了,想下载的可以点我头像,我博客第一篇里有百度云链接...网易云NCM格式转换器,本来是帮高中的一个小师弟做的小工具,然后干脆分享上来吧。转换借鉴了github上面的一个ncmdump的项目,想了解可以自行去找
  • PDF转换成Word工具

    热门讨论 2015-05-04 16:46:47
    拥有这款PDF转换器,您相当于有了WORD转PDF转换器,PDF转WORD转换器,PDF转DOC转换器,PDF转TXT转换器,PDF转HTML转换器,PDF转JPG转换器,PDF转HTML转换器,PDF转FLASH转换器,DOC转PDF转换器,TXT转PDF转换器,...
  • pdf转换成word 破解版

    热门讨论 2011-11-17 15:00:55
    右键转换:在安装 AnyBizSoft PDF to Word的时候若勾选了将程序添加到快捷菜单的选项,可直接右键点击单个PDF文件,在弹出菜单中选择使用AnyBizSoft PDF to Word转换,便可迅速将该PDF文件转换成Word文档,而无须...
  • 转换算法的难点在于,如何处理行列合并,将Excel的行列合并模型转换成Html表格的行列合并模型。 背景故事 因实际需要,需要将Excel展现在Web界面中。 最初,想在网上找开源的东东,结果没有1个是想要的。有的特别...
  • [C#源码]VS各版本转换器(支持VS2012,VS2013)

    千次下载 热门讨论 2013-11-02 17:03:37
    项目名称:[C#源码]VS各版本转换器(支持VS2012,VS2013) 下载内容: (C#源码)VS各版本转换器 实现功能: 支持vs2003-vs2013的各版本转换,由高到低,由低到高都支持。 新增vs2012和vs2013的转换支持。 小编:下载0...
  • 怎么把图纸转换成t3格式

    千次阅读 2020-12-28 22:49:45
    在 2015-05-27 3358人浏览 图纸格式之间的相互转化 图纸格式之间的相互转换 图纸格式之间的相互转换分为:CAD 图纸后缀为.dwg 格式转换为 PDF 格式的和 PDF 格式的图纸转换为 dwg 格式的两部分, 接下来具体介绍 两...

    cad转化成t3格式

    1、 打开天正 cad

    3、 找到图纸保存的位置,点击点开

    5、 选择输出类型,输入 3

    8

    2020-05-27

    42人浏览

    在CAD看图中如何将图纸转成T3格式

    浩辰 CAD 看图王官方页面:http://yun.gstarcad.com/

    在 CAD 看图中如何将图纸转成 T3 格式

    设计人员在绘制图纸的时候, 目前有很多绘图人员还是使用天正的软件, 当他们在绘制 完成后,将图纸保存为天正的格式,为了绘图的方便,目前使用高版本绘图的人越来越多, 保存为高版本的天正图纸后,我们如果使用软件看图的时候,会发现还不支持,需要将高版 本的图纸转换为 T3 格式后再打开,那么如何将图纸转成 T3 格式呢? 今天就为大家简单介绍下如何将图纸转换成 T3 格式,具体操作步骤如下所示: 1、使用浩辰 CAD 看图王软件打开图纸;

    2、在常用菜单下有个天正版本转换,点击,弹出图形导出的对话框,选择需要导出的 格式,并点击保存;

    1

    浩辰 CAD 看图王官方页面:http://yun.gstarcad.com/

    3、图纸导出完成,高版本的图纸成功转换成低版本的 T3 格式。

    PS:如果实在找不到转换版本的功能菜单,可以使用快捷命令:ICEXPORT,具体操作同 上,再次不赘述。

    文章来源:浩辰 CAD 官网 CAD 教程

    2

    2019-04-24

    1266人浏览

    CAD转化为t3格式

    1.

    打开天正 CAD

    2. 文件布图—批量转旧 文件布图 批量转旧 下边的)+号 (如果没有这个菜单栏,点 Ctrl 和(F10 下边的 号 如果没有这个菜单栏, 或者直接

    回车就可以,也就是批量转旧的首字母) 在命令栏里输入 plzj 回车就可以,也就是批量转旧的首字母)

    3.

    找到图纸保存的位置, 找到图纸保存的位置,点击点开

    4.

    选择转化好后的保存路径

    5. 选择输出类型,输入 3, 选择输出类型,

    6. 在输入文件后缀直接点回车

    7. 完成

    如果转化完成导入图形中还是显示不全, 如果转化完成导入图形中还是显示不全,可以尝试如下操作 1. 炸开 框选图纸 ,在命令栏里输入 x , 回车,保存后导入

    2.

    写块 框选图纸 ,在命令栏里输入 w,回车,出现写块的对话框,选 择保存路径,点确定,再将保存好的块导入软件中即可

    2020-05-26

    154人浏览

    CAD转化为t3格式

    如何将天正 CAD 装换成普通 CAD 格式( T3)

    1. 打开天正 CAD 2. 文件布图—批量转旧 (如果没有这个菜单栏,点 Ctrl 和(F10 下边的)+号 或者直接

    在命令栏里输入 plzj 回车就可以,也就是批量转旧的首字母)

    3. 找到图纸保存的位置,点击点开

    4. 选择转化好后的保存路径

    5. 选择输出类型,输入 3,

    6. 在输入文件后缀直接点回车

    7. 完成

    如果转化完成导入图形中还是显示不全,可以尝试如下操作 1. 炸开 框选图纸 ,在命令栏里输入 x , 回车,保存后导入

    2. 写块 框选图纸 ,在命令栏里输入 w,回车,出现写块的对话框,选 择保存路径,点确定,再将保存好的块导入软件中即可

    2014-09-03

    1412人浏览

    CAD转化为t3格式

    1.

    打开天正 CAD

    2. 文件布图—批量转旧 (如果没有这个菜单栏,点 Ctrl 和(F10 下边的)+号 或者直接

    在命令栏里输入 plzj 回车就可以,也就是批量转旧的首字母)

    3.

    找到图纸保存的位置,点击点开

    4.

    选择转化好后的保存路径

    5. 选择输出类型,输入 3,

    6. 在输入文件后缀直接点回车

    7. 完成

    如果转化完成导入图形中还是显示不全,可以尝试如下操作 1. 炸开 框选图纸 ,在命令栏里输入 x , 回车,保存后导入

    2.

    写块 框选图纸 ,在命令栏里输入 w,回车,出现写块的对话框,选 择保存路径,点确定,再将保存好的块导入软件中即可

    2013-08-20

    938人浏览

    如何将CAD图纸转换为CAD格式

    迅捷 CAD 转换器:http://www.cadzhuan.com/

    如何将 CAD 图纸转换为 PDF 格式?

    如何将 CAD 图纸转换为 CAD 格式?从事 CAD 制图不仅需要我们拥有很好的制图能力, 同时也需要我们拥有解决各种格式转换的能力,今天这里就和大家分享如何将 CAD 格式文 件转换为 PDF 格式的方法。

    1.打开电脑浏览器将迅疾 CAD 转换器软件安装在电脑上,当然根据自己平时软件下载 的习惯进行下载安装即可。

    2.双击软件就可以将软件打开,点击打开软件进入选择 CAD 转 PDF 功能点击进入,在 右侧选择打开需要进行转换的文件进行添加。

    迅捷 CAD 转换器:http://www.cadzhuan.com/

    3.根据我们的需要将输出 PDF 文件的输出质量,色彩,背景颜色以及页面大小等属性 进行设置。

    4.设置转换文件的存储路径,直接的选择右上角的“浏览”按钮进行操作,存储路径 设置完成之后。

    迅捷 CAD 转换器:http://www.cadzhuan.com/

    5.选择“批量转换”按钮即可将 CAD 文件转换为 PDF 格式。

    迅捷 CAD 转换器:http://www.cadzhuan.com/

    几个简单的小步骤就可以帮助我们将 CAD 格式文件转换为 PDF 格式啦, 方法十分简单, 绝对适合 CAD 新老手,使用,赶紧看看吧。

    2018-04-27

    138人浏览

    T3格式转换

    天正文件转T3格式CAD图 (2010-12-15 16:32:54)转载▼

    快捷命令:lcjb

    建施图在斯维尔打不开时,看下一句

    打开天正-删掉不需要部分-文件布图-图形导出-选择天正6-选择保存位置-保存即可

    或者打开天正,直接按命令lcjb,选择天正6,保存即可

    标签: 天正 cad t3 格式 转换 教育分类: 雕虫小技

    如果别人没有装天正或者天正版本低的话 不转成T3的 别人就看不到文字和标注。

    天正转成T3:在左边天正的菜单(文件布图)里的(图形导出)上,里面有T3、T4、T5等;

    在天正界面下,天正工具栏--文件布图--图形导出(或批量转旧)---保存类型选择天正3文件---ok

    T3文件也是可以编辑的,只是标注和文字就会被炸开,没天正方便。

    天正3+R14 为旧版 天正7+CAD2000-CAD2002 为一个中转版本 天正7+CAD2007-2009为最新版

    1、如果你的电脑上装有天正7+2000-2002版本,那么你打的DWG文件可以直接在天正菜单里的 文件布图->图形导出(天正6.0和6.5的是另存旧版),然后按保存,就可以转存为一份格式为天正3+R14的DWG了。可以用天正3+R14正常打开。

    2、如果你的电脑上装有天正7+2004-2006版本,那么你打开的DWG文件,那么要按左上个角的“文件”->另存为->cad2000图形的DWG。另存一份后,再用前面的方法(1)打开存为天正3+R14格式就可以了。

    如果你个人喜欢用高版本的CAD,如天正7+2006,那么最好也装一个CAD2002,因为CAD2002是转存天正3的关键。

    3. 如果你的电脑上装有天正7+2007-2009版本,那么你使用天正7的图形导出,选择天正3格式就自动转换到天正3+R14的DWG文件了,不必再转一次。

    原来的图是用天正画的,存成t3版即可。具体操作:工具》CAD标准》图形转换器,或者命令laytrans。但是用CAD打开后是炸开的

    实现图形对象兼容

    下表给出了图纸提供方与接收方环境不同时,解决图纸交流的存盘方法,用户插件要求升级到T7格式:

    接收环境R15(2000-2002)R16(2004-2006)

    R14另存 T3另存 T3 ,再用

    2012-04-13

    15115人浏览

    纸版图纸转换CAD格式的方法

    纸版图纸转换 CAD 格式的方法 最近水利部要求进行水库登记,原来的纸版图纸统统要转换为 CAD 格式文件,现就我自己摸索的一 点经验共享给大家,希望能起到抛砖引玉作用。 具体步骤: 1、将原纸版图纸扫描成 jpg 格式图像,原图有污点如果可以清理尽量清理干净。 2、在 CAD 中插入光栅图像。 3、校准:关键的一步。扫描图或多或少有点在原图上找两个特征点,用直尺测量出实际长度,例如 89mm。在

    2015-05-27

    3358人浏览

    图纸格式之间的相互转化

    图纸格式之间的相互转换

    图纸格式之间的相互转换分为:CAD 图纸后缀为.dwg 格式转换为 PDF 格式的和 PDF 格式的图纸转换为 dwg 格式的两部分, 接下来具体介绍 两种格式之间相互转换的具体方法: 一、 dwg 转换为 PDF 1、 AutoCAD 直接转换 先用 CAD 打开需要转换的图纸,操作步骤和打印图纸的方法 差不多,选择“文件”-“打印”或者直接使用快捷键 ctrl+p, 调出打印选择界面;

    出现这个界面, 直接点击 “确定” 或 ESC、 Enter、 空格键都可以, 然后进入下面的打印设置界面

    进行设置:①打印机/绘图仪 名称的地方选择“Microsoft Print to PDF”,这一步最重要,也是和打印图纸区别的地方;②“图纸尺寸” 选择你所需要的,一般选择“A3” ;③“打印范围”选择“窗口” ;④ “打印比例”勾选“布满图纸” ;⑤“图纸方向”根据自己要求设置; ⑥“打印样式表”根据自己需要选择。全部设置完成后选择“窗口” 进入 CAD 操作界面对你需要转换图纸的部分进行框选, 如果你想要转 换的图纸部分不在 CAD 打印框内, 不进行这一步操作, 转换完成后你 会发现不是你需要的图纸或空白的文件。框选完成后点击“确定”进 入文件保存界面;

    选择你需要保存的位置和输入文件名,点击保存。这个转换过程 就完成了。 如果你还要继续进行图纸转换,直接调出打印设置界面在“页面 设置”-“名称”选择“上一次打印” ,就不需要再进行其他设置调整 了,然后“窗口”框选,点击确定即可。

    2、

    借用其他软件转换

    百度下载“kjCAD”软件(或叫“快捷 CAD”),安装。 打开软件,选择“转换”

    选择“DWG/DXF→PDF”

    选择“添加文件” ,选择需要转换的图纸,也可以同时选择多个 CAD 图纸,进行批量转换,但必须确保每个需要转换的图纸都在 CAD 打印框内,否则会被漏掉。

    然后①选择“目标文件夹”设置需要保存到的位置;②选择“转 换布局”-“所有布局” ;③“页面大小”-根据自己的要求选择;然 后点击开始转换。

    特别注意:我们要转换的 CAD 图纸必须得在 CAD 打印框内,如果不在 打印框内,此时转换完成后显示是空白页,所以需要我们先把需要转 换的内容移到 CAD 打印框中。

    二、 PDF 格式转换为 dwg

    2017-07-20

    1824人浏览

    cad文件格式及转换

    cad 在完成绘制之后,保存时所选的文件类型(T)有哪几种,它们都有什么特 征或有什么不同?

    首先 CAD 保存 分为 4 种格式 分别是 DWG.DWS.DWT.DXF 分析下

    下面我们具体

    DWG ——AutoCAD 的图形文件,是二维图面档案。 它可以和多种文件格式 进行转化, 如.DWF 等。 DWG 文件打开软件介绍: ABViewer 是 Soft Gold 推

    出的 ABViewer 图形查看器适合在家庭和工作中使用,它可以查看、浏览并编 辑 CAD 格式 (DWG, DXF, HPGL, SVG, CGM 等) 以及约 30 种光栅图像格 式,该程序还可以精确调节图形,并将其转成不同的文件格式。程序具有批处理 功能。 ABViewer 的界面直观,在工具栏上可以迅速找到有关选项及命令。

    在浏览器面板浏览文件夹时, 即可打开文件, 频繁使用的图形会加到收藏列表中。 dws ——AutoCAD 图形标准检查文件 dwt——AutoCAD 样板 FrontPage 模板 AutoCAD FrontPage

    文件是网页模板文件(Dreamweaver Template), 在创建网站的多个网页的时候, 通常可以将网页的共同部分创建成为一个模板, 然后给多个网页调用, 以实现网 页代码的重复利用. 制作模板的时候, 用户可以自定义的模板可编辑区域和非可 编辑区域, 可编辑区域将在调用模板的网页中再次填充代码.

    DXF 是 Autodesk 公司开发的用于 AutoCAD 与其它软件之间进行 CAD 数据交换的 CAD 数据文件格式 ,是 一种基于矢量的 ASCII 文本格式。由于 Autocad 现在是最流行的 cad 系统,DXF 也被广泛使用,成为事实上的标准。 绝大多数 CAD 系统都能读入或输出 DXF 文件。 DXF 文件是由很多的“代码”

    和“值”组成的“数据对”构造而成,这里的代码称为“组码”(group code),指定其 后的值的类型和用途。每个组码和值必须为单独的一行的。 DXF 文件被组织

    成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着

    是组码“2”和表示段名的字符串(如 HEADER)。段的中间,可以使用组码和值 定义段中的元素。段的结尾使用组码“0”和字符串“ENDSE

    2011-05-07

    40650人浏览

    如何将一张CAD图纸转换成Word格式呢

    如 何 将 一 张 CAD 图 纸 转 换 成 Word 格式呢

    如何将一张 CAD 图纸转换成 Word 格式呢

    如何将一张 CAD 图纸转换成 Word 格式呢?当我们在打开一张 CAD 图 纸文件想要将其转换成 word 格式的时候,我们应该如何进行操作 呢?操作起来会不会很麻烦呢?今天小编就来教教大家如何将 CAD 图纸转换成 Word 的全部操作步骤,希望大家进行采纳哦! 第一步:首先要去到官网上下载一个 CAD 编辑器的软件,小编用的都 是迅捷 CAD 编辑器标准版,如果您需要进行软件的下载的话,您就可 以去到进行下载!

    第二步:完成软件的下载后并安装,然后就可以打开进入软件操作使 用了!

    第三步:选择导入您想转换的文件并进行图纸的打开!

    第四步 :接着选择上方属性栏中的查看器然后并点击最大化的图标 将图片放到最大!

    第五步:在 CAD 绘图设置功能区中,选择图层选项,打开图层设置窗 口!

    第六步:选择第一个图层,按住 shift 键,点击最后一个图层,全选, 然后将图层改成黑色,然后点击 OK 即可!

    第七步:移动鼠标全选接着在属性栏中找到三个复制软功能 第八步:选择复制后,打开 Word 文档,然后将被复制的 CAD 图纸粘

    贴到 Word 文件中即可。

    好了,以上就是如何将一张 CAD 图纸转换成 Word 格式呢的全部操作 步骤了,如果您还想了解更多相关 CAD 方面的知识的话,您可以直接 关注我们的微信公众号 迅捷 CAD ,公众号上每天都会进行相关 CAD 文章的更新哦,您们可以进行阅读学习!

    2020-04-18

    188人浏览

    cad图纸怎么转换成图片

    Cad 图纸怎么转换成图片,cad 转图片的好办法。现如今 cad 文件 较多存在于设计行业当中,设计师制作设计的图纸就是 cad 格式文 件。这是一种较为特殊的文件格式,需要使用专用工具才能打开查看。 因此设计师们在制作好 cad 图纸后,为了便于客户查看图纸内容,就 会将 cad 图纸转换为图片格式。今天小编就将好好跟大家讲讲,如何 将 cad 图纸转换为图片。

    1.可将 cad 图纸转换为图片的方法其实有很多,只要大家选择适 用的工具,运用正确的方法都能成功将 cad 图纸转换为图片。今天小 编就告诉大家两种操作简单,省时省力的方法。小伙伴们先在百度中 搜索 cad 转 pdf 在线转换,然后点击进入到相关页面当中。

    2.进入页面后,鼠标点击页面中的【文档转换】选项,然后再点 击选中下方众多功能选项中的【CAD 转 JPG】。

    3.接下来又会转入新页面当中,鼠标单击页面内的【点击选择文 件】,把要转换的 cad 文件添加到该页面中。

    4.在页面内下方的【自定义设置转换】中,可设置转换后图片的 格式、图片的质量、图片的颜色,以及选择是否公开转换后的图片内 容。

    5.如果大家还有其它要转换的 cad 文件忘记添加了。可点击页面 中的【继续添加】选项,把没有添加的 cad 文件再次添加到页面当中,

    将这些 cad 文件统一完成转换操作。

    6.接着大家就可使用鼠标点击页面内的【开始转换】选项,然后 就需要大家耐心等待一会。在页面当中也会告知大家整个转换过程, 预计所需要的时间为多少。

    7.当转换页面提醒大家操作完成后,鼠标点击页面中的【立即下

    载】选项,把转换后的图片下载保存到自己的电脑内即可。

    8.除了上述所讲述得在线转换方法外,还有个使用转换工具轻松 完成 cad 转图片的好方法。小伙伴们先给自己的电脑安装个具有 cad 转图片功能的 pdf 转换器。

    9.先鼠标点击 pdf 转换器图标将其给打开,然后进入转换器界面

    当中,鼠标点击界面内左侧的【特色功能】——【CAD 转图片】。

    10.鼠标双击将保存 cad 文件的文件夹打开,再鼠标左击选中要转 换的文件,并把它拖拽到转换器当中。

    11.然后鼠标点击转换器内上方的【原文件夹】按钮,这样能将转 换后的图片保存到,存储转换前 cad 文件的文件夹当中。

    12.接下来大家可在转换器正式开始转换前

    2019-08-30

    9人浏览

    cad图纸怎么转换成图片

    Cad 图纸怎么转换成图片,cad 转图片的好办法。现如今 cad 文件 较多存在于设计行业当中,设计师制作设计的图纸就是 cad 格式文 件。这是一种较为特殊的文件格式,需要使用专用工具才能打开查看。 因此设计师们在制作好 cad 图纸后,为了便于客户查看图纸内容,就 会将 cad 图纸转换为图片格式。今天小编就将好好跟大家讲讲,如何 将 cad 图纸转换为图片。

    1.可将 cad 图纸转换为图片的方法其实有很多,只要大家选择适 用的工具,运用正确的方法都能成功将 cad 图纸转换为图片。今天小 编就告诉大家两种操作简单,省时省力的方法。小伙伴们先在百度中 搜索 cad 转 pdf 在线转换,然后点击进入到相关页面当中。

    2.进入页面后,鼠标点击页面中的【文档转换】选项,然后再点 击选中下方众多功能选项中的【CAD 转 JPG】。

    3.接下来又会转入新页面当中,鼠标单击页面内的【点击选择文 件】,把要转换的 cad 文件添加到该页面中。

    4.在页面内下方的【自定义设置转换】中,可设置转换后图片的 格式、图片的质量、图片的颜色,以及选择是否公开转换后的图片内 容。

    5.如果大家还有其它要转换的 cad 文件忘记添加了。可点击页面 中的【继续添加】选项,把没有添加的 cad 文件再次添加到页面当中,

    将这些 cad 文件统一完成转换操作。

    6.接着大家就可使用鼠标点击页面内的【开始转换】选项,然后 就需要大家耐心等待一会。在页面当中也会告知大家整个转换过程, 预计所需要的时间为多少。

    7.当转换页面提醒大家操作完成后,鼠标点击页面中的【立即下

    载】选项,把转换后的图片下载保存到自己的电脑内即可。

    8.除了上述所讲述得在线转换方法外,还有个使用转换工具轻松 完成 cad 转图片的好方法。小伙伴们先给自己的电脑安装个具有 cad 转图片功能的 pdf 转换器。

    9.先鼠标点击 pdf 转换器图标将其给打开,然后进入转换器界面

    当中,鼠标点击界面内左侧的【特色功能】——【CAD 转图片】。

    10.鼠标双击将保存 cad 文件的文件夹打开,再鼠标左击选中要转 换的文件,并把它拖拽到转换器当中。

    11.然后鼠标点击转换器内上方的【原文件夹】按钮,这样能将转 换后的图片保存到,存储转换前 cad 文件的文件夹当中。

    12.接下来大家可在转换器正式开始转换前

    2019-08-08

    44人浏览

    cad图纸怎么转换成图片

    Cad 图纸怎么转换成图片,cad 转图片的好办法。现如今 cad 文件 较多存在于设计行业当中,设计师制作设计的图纸就是 cad 格式文 件。这是一种较为特殊的文件格式,需要使用专用工具才能打开查看。 因此设计师们在制作好 cad 图纸后,为了便于客户查看图纸内容,就 会将 cad 图纸转换为图片格式。今天小编就将好好跟大家讲讲,如何 将 cad 图纸转换为图片。

    1.可将 cad 图纸转换为图片的方法其实有很多,只要大家选择适 用的工具,运用正确的方法都能成功将 cad 图纸转换为图片。今天小 编就告诉大家两种操作简单,省时省力的方法。小伙伴们先在百度中 搜索 cad 转 pdf 在线转换,然后点击进入到相关页面当中。

    2.进入页面后,鼠标点击页面中的【文档转换】选项,然后再点 击选中下方众多功能选项中的【CAD 转 JPG】。

    3.接下来又会转入新页面当中,鼠标单击页面内的【点击选择文 件】,把要转换的 cad 文件添加到该页面中。

    4.在页面内下方的【自定义设置转换】中,可设置转换后图片的 格式、图片的质量、图片的颜色,以及选择是否公开转换后的图片内 容。

    5.如果大家还有其它要转换的 cad 文件忘记添加了。可点击页面 中的【继续添加】选项,把没有添加的 cad 文件再次添加到页面当中,

    将这些 cad 文件统一完成转换操作。

    6.接着大家就可使用鼠标点击页面内的【开始转换】选项,然后 就需要大家耐心等待一会。在页面当中也会告知大家整个转换过程, 预计所需要的时间为多少。

    7.当转换页面提醒大家操作完成后,鼠标点击页面中的【立即下

    载】选项,把转换后的图片下载保存到自己的电脑内即可。

    8.除了上述所讲述得在线转换方法外,还有个使用转换工具轻松 完成 cad 转图片的好方法。小伙伴们先给自己的电脑安装个具有 cad 转图片功能的 pdf 转换器。

    9.先鼠标点击 pdf 转换器图标将其给打开,然后进入转换器界面

    当中,鼠标点击界面内左侧的【特色功能】——【CAD 转图片】。

    10.鼠标双击将保存 cad 文件的文件夹打开,再鼠标左击选中要转 换的文件,并把它拖拽到转换器当中。

    11.然后鼠标点击转换器内上方的【原文件夹】按钮,这样能将转 换后的图片保存到,存储转换前 cad 文件的文件夹当中。

    12.接下来大家可在转换器正式开始转换前

    2019-08-28

    216人浏览

    cad图纸怎么转换成图片

    Cad 图纸怎么转换成图片,cad 转图片的好办法。现如今 cad 文件 较多存在于设计行业当中,设计师制作设计的图纸就是 cad 格式文 件。这是一种较为特殊的文件格式,需要使用专用工具才能打开查看。 因此设计师们在制作好 cad 图纸后,为了便于客户查看图纸内容,就 会将 cad 图纸转换为图片格式。今天小编就将好好跟大家讲讲,如何 将 cad 图纸转换为图片。

    1.可将 cad 图纸转换为图片的方法其实有很多,只要大家选择适 用的工具,运用正确的方法都能成功将 cad 图纸转换为图片。今天小 编就告诉大家两种操作简单,省时省力的方法。小伙伴们先在百度中 搜索 cad 转 pdf 在线转换,然后点击进入到相关页面当中。

    2.进入页面后,鼠标点击页面中的【文档转换】选项,然后再点 击选中下方众多功能选项中的【CAD 转 JPG】。

    3.接下来又会转入新页面当中,鼠标单击页面内的【点击选择文 件】,把要转换的 cad 文件添加到该页面中。

    4.在页面内下方的【自定义设置转换】中,可设置转换后图片的 格式、图片的质量、图片的颜色,以及选择是否公开转换后的图片内 容。

    5.如果大家还有其它要转换的 cad 文件忘记添加了。可点击页面 中的【继续添加】选项,把没有添加的 cad 文件再次添加到页面当中,

    将这些 cad 文件统一完成转换操作。

    6.接着大家就可使用鼠标点击页面内的【开始转换】选项,然后 就需要大家耐心等待一会。在页面当中也会告知大家整个转换过程, 预计所需要的时间为多少。

    7.当转换页面提醒大家操作完成后,鼠标点击页面中的【立即下

    载】选项,把转换后的图片下载保存到自己的电脑内即可。

    8.除了上述所讲述得在线转换方法外,还有个使用转换工具轻松 完成 cad 转图片的好方法。小伙伴们先给自己的电脑安装个具有 cad 转图片功能的 pdf 转换器。

    9.先鼠标点击 pdf 转换器图标将其给打开,然后进入转换器界面

    当中,鼠标点击界面内左侧的【特色功能】——【CAD 转图片】。

    10.鼠标双击将保存 cad 文件的文件夹打开,再鼠标左击选中要转 换的文件,并把它拖拽到转换器当中。

    11.然后鼠标点击转换器内上方的【原文件夹】按钮,这样能将转 换后的图片保存到,存储转换前 cad 文件的文件夹当中。

    12.接下来大家可在转换器正式开始转换前

    2019-07-28

    127人浏览

    怎么将CAD图纸转换成JPG图片格式

    迅捷 CAD 转换器 http://www.cadzhuan.com/

    怎么将 CAD 图纸转换成 JPG 图片格式

    通常我们在 CAD 制图设计的时候,为了更好的传输查看,会将 dwg 文件转换 成 jpg 图片格式。 那么该如何快速方便的完成这一转换操作呢?小编推荐使用迅 捷 CAD 转换器。 具体步骤如下: 步骤一:首先在浏览器里搜索迅捷 CAD 转换器下载安装到电脑端。如下图:

    步骤二:打开软件运行,点击软件界面右侧“CAD 转图片”按钮。如下图:

    迅捷 CAD 转换器 http://www.cadzhuan.com/ 步骤三:点击“添加文件”这个按钮。把需要转换的 CAD 图纸文件添加至软 件,也可直接把文件拖曳至软件界面里。如下图:

    步骤四:选择好“输出格式”为 JPG 图片格式。同时还可以对输出色彩、页 面大小、背景颜色等进行自定义设置。如下图:

    迅捷 CAD 转换器 http://www.cadzhuan.com/

    步骤五:然后在“输出目录”右侧的“浏览”框里选择好转换后 JPG 图片保 存位置。如下图:

    迅捷 CAD 转换器 http://www.cadzhuan.com/ 步骤六:最后点击“批量转换”按钮,稍等片刻,你的 CAD 图纸文件就转换 成 JPG 图片了。如下图:

    以上就是怎么将 CAD 图纸转换成 JPG 图片格式的具体方法, 特别的简单方便, 真的是 CAD 初学者的福音哦,小伙伴们快来试一下吧!

    2018-05-22

    173人浏览

    CAD图纸能转换几种格式形式

    每个 CAD 设计师都或多或少的绘制一些图纸,而对于 CAD 图纸查看的问题都 应该知道。其实有着不少的 CAD 设计师为了方便别人查看图纸,则是会选择对图 纸进行一些格式间的转换。CAD 图纸转换几种格式,具体的操作步骤演示如下:

    第一步:其实我们不要把 CAD 图纸转换那么难。这里我们点击界面中的迅捷 CAD 转换器图标,之后我们我们会进入 CAD 转换器操作界面。

    第二步:CAD 版本转换、CAD 转 PDF、CAD 转图片、PDF 转 CAD 等六种格式转 换。这里我们就以 PDF 转 CAD 为例,用鼠标点击该命令进行切换新界面,点击添 加文件添加需要转换的文件。

    第三步:一般我们所进行转换有着需求要我们进行设置,这里设置有输出类 型。CAD 图纸我们最常见的有着 dwg、dxf 两种形式,我们根据要求设置就好。

    第四步:之后我们就可以对文件进行格式转换,这里只需要点击界面中的批 量转换,随后几分钟就能够轻松的完成文件格式转换。

    第五步:转换后的文件就可以进行编辑,如果你想要分享给 CAD 设计小伙伴, 可以直接点击界面中的分享命令,随后就可以分享给你的 CAD 设计朋友。

    以上就是小编今天所要分享的全部内容,对此你有什么不懂或者是不理解, 都可以跟着上边的步骤操作几遍。希望对大家能够有所帮助!

    2019-10-15

    97人浏览

    PDF格式的图纸怎样转换成CAD格式的图纸

    PDF 格式的图纸怎样转换成 CAD 格式的呢?很多从事设计的小伙 伴应该都知道很多的 CAD 作图软件, 是不支持对 PDF 图纸进行编辑修 改的,所有工作中会经常需要将 PDF 格式的图纸转换成 CAD 格式的, 那么我们应该如何实现这两者之间的转换呢?下面我们就一起来看 一下吧。 步骤一:我们需要先将需要转换的 PDF 文件准备好,然后通过电 脑浏览器搜索迅捷 PDF 在线转换器。

    步骤二:找到这个在线转换器后,点击进入这个转换器页面,然 后在页面上方选择文件转换里面的 PDF 转 CAD 功能。

    步骤三:进入 PDF 转 CAD 功能页面后,就可以将需要转换的 PDF 文件添加进来了。

    步骤四:文件添加进来后,在文件的下方可以对一些转换的自定 义选项进行修改。

    步骤五:自定义选项修改好后,就可以点击“开始转换”对 PDF 文件进行转换了。

    步骤六:耐心等到文件转换结束后,就可以对转换后的 CAD 文件 进行保存了。

    PDF 格式的图纸转 CAD 格式的问题,上面已经给出了具体的解决 方法了,下次再遇到同样的问题,只需要按照上面的操作步骤进行即 可。

    2018-11-28

    809人浏览

    展开全文
  • PCIe地址转换服务(ATS)详解

    万次阅读 多人点赞 2021-09-11 23:33:06
    PCIe地址转换服务(ATS)详解

    ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️


    🔥 1. 为何PCIe需要ATS?

    ✨1.1 为何需要DMA地址转换?

      为节省CPU资源,IO function常采用DMA方式访问内存。虽说在诸多实现方案中IO function看到的物理地址空间与CPU无异,但也不乏例外。在有些方案中,IO function看到的地址空间只是真实物理空间的handle,需要RC将DMA请求进行一次地址转换才能将访问到真实物理存储地址,此外还涉及到DMA访问地址空间的合法性检查。幸好,目前绝大部分系统结构都支持对来自IO function的DMA请求进行地址转换。

    ✨1.2 DMA地址转换的益处

    • 确认IO function DMA 请求的合法性,防止非法DMA请求产生破环;
      支持scatter-gater,通过地址转换,scatter-gather DMA一次传输访问多个物理上不连续的地址块;
    • 通过改变传输地址,RC无需与IO function协调即可实现消息信号中断的重定向;
    • 可以将32bit位宽的IO funtion映射到更大的系统地址空间;
    • 易于实现虚拟化传输。

    ✨1.3 DMA地址转换的不良影响及解决方案

      RC进行DMA地址转换是需要时间的,相较于不进行地址转换,显然进行DMA地址转换会增加DMA访问的时间。尤其是访问驻留内存转换表时,采用地址转换的方案会大大增加DMA访问的时间。当单次传输需要多次内存访问时,地址转换无疑会大大降低传输效率。

      为了减小地址转换的以上不良影响,设计人员常常在需要进行地址转换的地方添加地址转换缓存(Address Translation Cache, ATC)。在CPU中,这种地址转换缓存通常是指转译后备缓冲区(Translation Look-aside Bufer, TLB);在IO地址转换中,我们常用ATC来跟CPU的TLB加以区分。TLB与ATC的区别:TLB一次只服务于CPU的单个线程,而ATC服务于PCIe设备的多个IO function,每个IO function都相当于一个独立的线程。


    ✨1.4 设备采用ATC的益处

    • 设备端的ATC能够减轻地址转换代理(Translation Agent, TA)的地址转换压力;
    • 开启了ATC使设备对系统ATC size的依赖更小;
    • 发往中心复合体的地址都是预先转换过的,潜在减小了访问时延,增加传输效率。


    ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

    🔥 2. ATS协议介绍

      PCIe设备及根复合体RC之间采用请求-完成协议来实现地址转换服务ATS。ATS主要包括两部分:

    • 地址转换(Translation):用以将ATPT中的转换地址缓存到本地ATC,包括地址转换请求及地址转换完成。
    • 地址作废(Invalidation):用以当ATPT中地址转换发生变化时,将ATC中的对应转换地址作废,包括地址转换作废请求及地址转换作废完成。

    ✨2.1 ATS地址转换协议(ATS Translation)

      PCIe Device/Function发送存储器读写请求前,首先在本地ATC查找是否有该地址的Entry。该地址为转换前地址,是DMA看到的虚地址;该地址在ATC中的Entry是指该虚地址经过地址转化后的真实物理地址。若在ATC内查找成功,直接采用转换后地址进行访问,否则给TA发送该虚地址的地址转换请求。

    在这里插入图片描述

      上图展示了一个基本的ATS转换请求-完成的操作。其动态工作流程如下:

    1. Device/Function产生ATS转换请求,经PCIe拓扑路由到达RC,RC将该请求推给TA;
    2. TA在收到地址转换请求后,查找其本地ATPT,并给Device/Function反馈查找结果(成功或失败)。

    2.1.1 ATS地址转换请求

      为了实现ATS,存储器读写TLP头标中新定义了地址类型(Address Type, AT)域来表征Device发给RC的地址是否经过了地址转换、是否为地址转换请求。AT域是存储器读请求、AtomicOp及ATS地址转换请求的专属域,在其他事务中该域为Reserved预留。AT域值解释如下:00b->未转换的地址;01b->地址转换请求;10b->已转换的地址;11b->预留。TA检测到AT=11b时会当成UR处理。

    1)ATS地址转换请求帧格式

      带有ATC的Device可以选择发送经过/未经地址转换的存储器访问请求。 存储器访问请求的TLP头标(64bit)格式如下图所示。ATS地址转换请求的TLP头标格式与存储器读请求TLP头标格式相似,ATS地址转换请求头标格式如下图所示。

    在这里插入图片描述
    在这里插入图片描述

    比较可见,地址转换请求与ATS地址转换请求TLP头标的主要区别在于以下3点:

    ① 地址转换请求的AT=01b,存储器读请求的AT=00b或10b;
    ② 地址转换请求的地址位[11:0]预留,存储器读请求的地址为[1:0]预留;
    ③ 地址转换请求有NW域,存储器读请求没有NW域。

      地址转换请求头标中其他各域补充解释如下:

    • Attr: 转换请求及转换完成没有排序要求,设置该域开启宽松排序,开启宽松排序后TA可根据实际情况决定是否对其收到的事务进行重排,此时发起请求的Device不能依赖TA保序。
    • Length: 该域用以表明当前转换请求需要返回多少笔转换完成包,每一笔转换完成包长8Byte,多笔转换完成包的地址间STU(最小转换单位)对齐地址递增。需要注意的是,length值需为偶数,最大值为RCB(读完成边界)。若length超出最大值或为奇数,TA会将该TLP当成畸形包进行处理。
    • Untranslated Address: 需要进行转换的地址,支持32bit及64bit,该地址域不含地址比特[11:0],TA依据该地址判断转换请求的有效性。对于请求多笔地址转换的情况,若ATPT中的转换后地址不满足转换请求的范围(2^(STU+12)*length/2),TA不会反馈该笔转换包。如果请求者未设置了页对齐,转换请求地址位比特[11:2]可以是任意值,否则必须为0,TA中也必须忽略[11:2]。
    • NW: 非写标志位,若该位置一,表明该转换后的地址只读,Device不能往该地址发送写请求。若需要写该地址,需要Device重新发送地址转换请求将该位清除。
    2)PCIe系统对ATS地址转换请求的处理

      为了减小设计复杂度、简化PCIe系统ATS的集成工作,ATS地址转换请求/完成的处理过程与PCIe读请求/读完成极其相似,在某些方面甚至完全相同,具体表现为:

    • ATS组件兼容PCIe-1.1组件;
    • ATS通过新的能力及关联结构进行开启,软件在发送ATS TLP之前需确认该设备具有ATS能力且已开启,否则不能发送ATS TLP,DMA 读写请求中的AT域也应置为0,即未转换的地址。
    • ATS TLP路由方式为地址或RID路由;
    • ATS TLP事务排序方式最寻PCIe的事务排序方式;
    • ATS TLP流经PCIe-1.1交换节点时需保持不变;
    • Device/Function可以混合发送转换即未转换请求。

      TA收到地址转换请求后会进行如下判断及操作:

    • 判断Device/Function是否开启了ATS能力;
    • 判断Device/Function发送的ATS地址转换请求地址是否合法、该Device/Function是否有权限访问该地址;
    • 判断TA自身是否能够响应该ATS请求;
    • 发送转换成功或失败信号给RC,RC产生请求完成TLP回复给发起转换请求的Device/Function。

    3)ATS地址转换请求注意事项 ⚠️⚠️📢📢

    • Device/Function可以一次连续发送多个地址转换请求,TC可以相同也可以不同。一笔ATS转换请求对应一笔或多笔转换完成,RC一次可以连续返回多笔请求完成TLP,某地址的转换完成TLP的TC需与其转换请求的TC保持一致。
    • 若某虚地址在ATC中没有对应Entry,Device/Function在发送其ATS转换请求并收到转换完成(成功)之前,不能发送标记为translated的该地址存储器访问请求。
    • ATC只能通过ATS协议进行填充,即发送ATS地址转换请求并收到该地址的转换完成(成功)。
    • ATC只能通过ATS协议进行修改,主机系统软件只能通过ATS转换作废操作对ATC内容进行修改,其他任何操作都不能修改ATC内容。即使是系统复位、Device/Function的复位操作,也只能更改invalidate entry不能更改ATC内容;
      ATS有转换请求超时退出机制,若发出地址转换请求后迟迟等不到转换完成,会超时退出。ATS转换请求的请求超时设置与存储器读请求相同。

    2.1.2 ATS地址转换完成

      TA在收到地址转换请求之后,需要给Device/Function反馈转换结果。Device/Function收到TA反馈的ATS转换完成包后会根据完成状态更新其ATC或将该地址标记为不存在,并依据完成结果进一步发送经过/未经地址转换的存储器读写请求。

    1) ATS地址转换完成帧格式

      转换完成TLP头标如下图所示。
    在这里插入图片描述

    • Cpl.Status: 地址转换完成状态。000b -> 成功;001b -> 不支持的请求(UR),TA地址转换失败。Device/Function收到该状态后需关闭ATC,且在重新开启ATC之前不应发送任何已转换地址的内存访问请求;010b -> 配置请求重传(CRS),若Device/Function收到该状态,需将其当作畸形包处理;100b -> CA,TA出现异常导致其无法处理该转换请求;其他 -> 预留,若 Device/Function收到该完成状态,当UR处理。只有在状态为000b时才表示地址转换成功,该头标后边紧跟data包,否则没有data包。
    • Byte Count:
    • Lower Address:
    • TC: Cpl/CplD的TC应与该地址的转换请求TC值相同。

      若TA无法对Device/Function要求转换的地址进行转换,TA会回复Cpl,此时Byte Count及Lower Address域需要置0,但实际应用中不建议采用这两个域中的值做任何判断。若ATS地址转换成功,在completion消息包后应紧跟携带有转换后地址的数据包CplD,其格式如下图所示。

    在这里插入图片描述
      各域的解释如下表:

    释义
    Translated Address转换之后的地址。
    S转换size。
    NNon-snooped accesses, 非侦探访问标志位,
    Reserved预留,ATC忽略这些位
    Global全局映射标志位。决定ATC是否将该转换后的地址映射到所有的PASID。
    Exe可执行标志位。决定该地址的code是否是可执行的,一般仅用于有PASID TLP前缀且execute requested置一的转换请求。该位置一时,R位必须置一。
    Priv特权模式访问标志位。
    U置一表示该范围地址仅允许通过非转换的地址进行访问。
    W,R标志该地址范围是否可写可读

    在这里插入图片描述

    补充解释:

    • Translated Address:Device/Function收到CplD后,若W=0且R=0,或U=1,则Device/Function不能使用当前转换地址。一旦转换地址缓存进ATC,Device/Function不能通过除地址转换作废协议以外的任何方式修改或删除ATC中该地址Entry。在开启ATS之前或收到转换CplD之前,不能通过任何方式填充ATC。开启ATS能力之前的ATC中的内容在开启了ATS后不也能直接使用,要么忽略不用,要不通过invalid协议将其作废,要使用的话需重新发送地址转换请求。
    • S:值0b表示4096Byte,为1的话,需要继续看地址bit[62:12]的值,bit[12]=1 -> 8096byte,bit[12]=1 & bit[13]=0 -> 16384byte,以此类推,参照图。bit[63:12]全为1时的行为尚未定义。若该size值比STU小,应将该笔TLP视为UR。该规则同样适用于invalidate完成TLP,bit[63:12]全为1时表示invalid所有ATC中的内容。
    • U:对于命令缓存等复用率很高的地址,将转换后的地址存入ATC,每次访问的时候直接发送转换后地址能够提升效率;但是对于数据缓存等复用率很低的地址,数据变化较频繁,地址映射变化也频繁,这样当地址映射发生变换的时候,TA就可以不用发送该地址的invalid给ATC。但是,当U=1或W/R=1时,ATC可以对该地址的U/W/R/Exe/Priv/S进行缓存,若该地址的这些属性发生变动,TA仍然需要发送invalid给ATC。

    注意:地址转换完成TLP可以设置其Attr为宽松排序来提升整体性能。

    2)有多笔地址转换的转换完成的情况

      通过设置转换请求TLP头标的Length域,ATC可以在一次地址转换请求中请求TA返回多笔连续虚地址的地址转换。在地址转换请求size(完成长度*4)不大于最大读请求size(或RCB)前提下,Length可设置为所请求转换长度的两倍。若Device/Function请求多笔转换,在不超过转换请求数量的情况下TA可返回一笔或多笔转换结果,即便是TA返回的转换包少于请求的数量,也不视为出错。

      若转换完成包含多笔地址转换数据,所有的转换结果中size必须相同,且相邻地址转换数据对应的虚地址应该是连续的。

      若转换数据的R=0且W=0,TA需设置size域及转换后地址域的低bit位设置合适的值。

      一次成功的ATS地址转换完成应包含至少一笔CplD,转换完成包中每一笔转换地址都在地址转换请求的范围内。

      若转换完成CplD的Byte Count值大于Length值的四倍,则意味着需要额外的转换完成CplD才能结束当前的转换完成事务。

      若转换完成CplD的Byte Count域值等于Length域值的四倍,该CplD意味着其对应转换请求的结束。此时,若Byte Count和Lower Address的和不是RCB的多(>=1)倍,说明当前CplD是这多笔转换完成包序列的最后一笔CplD。若此前没有收到过该地址转换请求的其他CplD,则表明出现错误(请求了多笔只收到一笔,当让是出错了),此前收到的转换结果应全部丢弃。

      注意⚠️⚠️📢📢:若干一次请求了多笔地址转换,实际返回的地址转换完成包数量有可能笔请求的多(CplD序列被拆分),也有可能比请求的少(CplD被截短)。有诸多原因会使TA截短CplD,例如Device、Function请求对一段地址范围的地址进行转换,但只有部分有效,TA就会将无效的部分截去,只留有效的部分并返回CplD,此时有效地址转换的CplD不会报错。有诸多原因会使TA拆分转换完成CplD,例如地址转换请求的地址范围跨越了RCB边界,TA就会将一笔请求完成拆成两笔CplD进行发送。


    ✨2.2 ATS地址转换作废协议(ATS Invalidation)

      如果TA发现其本地某个地址映射发生变化,其需告知Device/Function无需继续在ATC中维护该虚地址Entry。TA通过给Device/Function发送一笔或多笔带有作废地址信息的地址转换作废请求来关闭ATC中该虚地址Entry,单笔作废请求对应至少一笔作废完成包。以单笔地址转换作废请求及作废完成为例,ATS地址转换作废操作如下图所示。
    在这里插入图片描述

      ATS地址转换作废动态流程有以下三步:

    1. 系统软件更新TA的地址转换表ATPT后,TA发送对应地址的转换作废请求给Device/Function;
    2. Device/Function收到来自TA的地址转换作废请求后,将其ATC指定虚地址Entry清除(但也不能立即清除)。但Device/Function不必立即清除其ATC中的对应entry;
    3. Device/Function在确保发送队列中所有使用待作废转换后地址TLP传输到TA之后,反馈作废完成包给TA。作废完成TLP中的ITAG应与其作废请求中的ITag保持一致(仅针对单笔Cpl,多笔Cpl的ITag Vector可以合并)。

    2.2.1 ATS地址转换作废请求

      如前文所述,当TA端地址映射发生变动时,其需要将这种变动告知ATC,使ATC中的相应地址变换作废。TA通过发送地址转换作废请求给ATC来保证ATPT及ATC地址映射的一致性。地址转换作废请求TLP的头标格式如图所示。

    在这里插入图片描述

      地址转换作废请求是带有64bit数据载荷的消息MsgD,其数据载荷中有携带有待作废的地址范围的起始值。地址转换作废请求TLP头标可采用任意TC值。作废请求中Itag值范围为0~31,用以对发出去的作废请求加以区分。在收到某笔作废请求的请求完成之前,该笔作废请求使用的ITag不允许重复使用。

      若ATC在收到的作废请求size小于STU,ATC可以将其当作UR处理,也可以不全作废地址范围为大于等于STU。Device/Function在收到作废请求后需要在~1分钟(+50%-0%)之内回复完成,否则ATPT会通报等待作废完成超时并释放该作废请求使用的ITag。

      作废请求的数据载荷TLP格式如下图所示。S域用以指明要作废的地址范围,使用方法与转换请求S域相同。Glocal Invalidate域是全局invalidate标志位,决定ATC是否将该作废请求应用到所有的PASID。地址位bit[63:12]全为1时表示invalid所有ATC中的内容。

    在这里插入图片描述

    2.2.2 ATS地址转换作废完成

      Device/Function完成TA的地址转换作废操作后回复作废完成消息给TA。作废完成消息TLP格式如下图所示。

    在这里插入图片描述

      地址转换作废完成包是基于ID路由的消息事务,Requester ID是该ATC所在的Function ID,Device ID是发送作废请求的TA ID,其值与作废请求的Requester ID相同。考虑到一个ATC仅对应一个TA,ATC可以在其收到的第一笔作废请求中提取出Request ID作为完成事务的Device ID,接下来的每次作废完成包中都采用该ID作为Device ID,而不必每次都重新提取,从而提升系统传输性能。

      完成计数域CC表示针对当前作废请求ATC需要反馈的作废完成包的数量,CC域为0时表示要发送8笔响应。TA端应能收集这些作废完成包并根据CC及ITag判断某笔作废请求是否成功完成。

      作废完成包可以采用任意TC值进行发送,其值与作废请求包的TC无关。

      ITag Vector用以表明该作废完成包对应哪笔作废请求,ITag Vector域与作废请求包中的Itag值相呼应。比如作废请求包中ITag值为a,则作废完成包 ITag Vector的bit[a]应为1,其余位为0。对于仅ITag Vector不同但TC、CC、requester ID完全相同的多笔作废完成包,也可应将这几笔作废完成包的ITag Vector或在一起,从而合并成为一笔作废完成包。

      如果某Device/Function不支持ATS却收到了地址转换作废请求,该Device/Function会将其作为UR处理。带有ATS能力的Device/Function,即便其ATS没有开启,也应能够接收作废请求并回复作废完成。

      注意⚠️⚠️📢📢

      ATC回应作废完成之前必须确定一下几件事:

    • 所有新发起的请求不能使用旧的已经作废掉的转换地址;
    • 发送队列中所有采用旧的已作废转换地址的outstanding读请求必须已经完全发送完毕或者被废弃;
    • 发送队列中所有采用旧的已转换地址的outstanding转发写请求必须已经被全部发至TA。若ATC不知道写请求是否到达TA,则ATC需采用与写请求相同TC发送作废完成包,有多少笔TC不同的写请求就采用与该笔写请求相同的TC发送多少笔作废完成包,通过相同TC事务间的PCIe事务排序规则来确保写请求能够先于作废完成包达到TA。这些作废完成包的CC值应相同。

    2.2.3 ATS地址转换作废流控(Invalidate Flow Control)

      对于不同的设计,其cache结构及排队策略也不同,这也意味着地址作废包的时延及吞吐量不同,这就难免出现TA发送作废请求的速率超出ATC的服务速率情况。当TA发送作废请求的速率超出ATC的服务速率时,由于其流控机制的信用量耗尽,会阻塞TA继续发送作废请求,这也会阻塞其他采用相同流控信用量的事务,从而影响性能。为避免这种情况的发生,可在TA端软件设计更高级的流控机制。

      为了实现流控,ATC必须在反压之前及时公布其作废请求事务的信用余量。

      在以下几种情况时,可以不开启地址作废流控:

    • Device/Function有能力处理以最大速率达到的作废请求;
    • Device/Function极少出现反压的情况,出现反压对性能影响也可以忽略不计;
    • Device/Function能够在不反压的情况下缓存下所有发过来的作废请求。

    ✨2.3 ATS协议存在的问题及解决办法

      ATS服务最大的问题在于它是基于信任的,是ATC自己声称它发出的地址是经过翻译还是没有经过翻译的。如果ATC生成这个地址已经翻译,就可以越过IOMMU的隔离。这个问题可以通过ACS来保护,ACS能够决定一个TLP能够正常路由、阻塞或重定向,可以在桥上禁止ATS消息。



    ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

    🔥 3. PCIe ATS配置

      所有支持ATS的Function扩展配置空间中必须有ATS扩展能力结构,如下图所示。

    在这里插入图片描述

      ATS扩展能力结构分为3部分:

    • PCIe扩展能力头标,用以表明该Function具有的能力;
    • ATS控制寄存器,表明该ATS invalidate queue的深度、是否支持页对齐、是否支持全局invalidate、是否支持宽松排序;
    • ATS能力寄存器,用以设置STU及启用ATS。

      分别如下图所示。

    在这里插入图片描述


    ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

    📖 参考

    1. PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)
    2. PCI Express Technology - Comprehensive Guide to Generation 1.x, 2.x and 3.0. Mike Jacson, Ravi Budruk, MindShare, Inc.
    3. PCI-SIG, Address Translation Services(PPT)
    4. Address Translation Services Revision 1.1, January 26, 2009
    5. ARM系列 – SMMU(一)
    6. ARM系列 – SMMU(二)
    7. IOMMU原理分析以及在Linux中初始化
    8. PCIe/SMMU ATS analysis note
    9. Introduction to PCIe Access Control Services
    10. PCIe SR-IOV:为什么需要SR-IOV
    11. Linux source code

    展开全文
  • JSON转换工具

    万次阅读 2021-12-11 09:01:17
    Jackson:开源免费的 JSON 转换工具,SpringMVC 转换默认使用 Jackson。 导入 jar 包。 创建核心对象。 调用方法完成转换。 常用方法: 常用类 ObjectMapper常用方法 JSON转换: 对象转 JSON, JSON 转对象: public...

    JSON的处理:

    • JSON(JavaScript Object Notation):是一种轻量级的数据交换格式。

    • 它是基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

    • 简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于计算机解析和生成,并有效的 提升网络传输效率。

    创建格式:

    在这里插入图片描述

    JSON转换工具的介绍:

    • 我们除了可以在 JavaScript 中来使用 JSON 以外,在 JAVA 中同样也可以使用 JSON。

    • JSON 的转换工具是通过 JAVA 封装好的一些 JAR 工具包。

    • 可以将 JAVA 对象或集合转换成 JSON 格式的字符串,也可以将 JSON 格式的字符串转成 JAVA 对象。

    • Jackson:开源免费的 JSON 转换工具,SpringMVC 转换默认使用 Jackson。

      • 导入 jar 包。
      • 创建核心对象。
      • 调用方法完成转换。

    常用方法:
    在这里插入图片描述

    常用类

    在这里插入图片描述

    ObjectMapper常用方法

    • 在这里插入图片描述

    JSON转换:

    对象转 JSON, JSON 转对象:

    public class ObjectMapperTest {
    
        private ObjectMapper mapper = new ObjectMapper();
    
        @Test
        public void test01() throws Exception {
            User user = new User("韩信", 99);
            //User对象转json
            String json = mapper.writeValueAsString(user);
            System.out.println("json字符串:" + json);
    
            //json转User对象
            User user2 = mapper.readValue(json, User.class);
            System.out.println("json对象:" + user2);
        }
    }
    

    Map转 JSON, JSON 转 Map:

    private ObjectMapper mapper = new ObjectMapper();    
    
    @Test
    public void test02() throws Exception {
    
            // map转json
            HashMap<String, String> map = new HashMap<>();
            map.put("姓名", "韩信");
            map.put("性别", "男");
            String json = mapper.writeValueAsString(map);
            System.out.println("json字符串:" + json);
    
            // json转map
            HashMap user = mapper.readValue(json, HashMap.class);
            System.out.println("json对象:" + user);
        }
    
    @Test
    public void test03() throws Exception {
            // map转json
            HashMap<String, User> map = new HashMap<>();
            map.put("打野", new User("韩信", 99));
            map.put("中单", new User("不知去向", 97));
            String json = mapper.writeValueAsString(map);
            System.out.println("json字符串:" + json);
    
            // json转map  map如果有自定义类型就要用TypeReference
            HashMap<String, User> user = mapper.readValue(json, new TypeReference<HashMap<String, User>>() {});
            System.out.println("json对象:" + user);
        }
    

    List转 JSON, JSON 转 List:

        @Test
        public void test04() throws Exception {
            // List<String>转json
            ArrayList<String> list = new ArrayList<>();
            list.add("上官原地");
            list.add("不知去向");
            String json = mapper.writeValueAsString(list);
            System.out.println("json字符串:" + json);
    
            // json转List<string>
            ArrayList user = mapper.readValue(json, ArrayList.class);
            System.out.println("json对象:" + user);
        }
    
        @Test
        public void test05() throws Exception {
            // List<String>转json
            ArrayList<User> list = new ArrayList<>();
            list.add(new User("上官原地", 99));
            list.add(new User("不知去向", 11));
            String json = mapper.writeValueAsString(list);
            System.out.println("json字符串:" + json);
    
            // json转List<string>
            ArrayList user = mapper.readValue(json, new TypeReference<ArrayList<User>>() {
            });
            System.out.println("json对象:" + user);
        }
    
    展开全文
  • 提取码:tha8 进制转换计算工具含源文件 导入模块 import tkinter from tkinter import * import tkinter as tk from tkinter.ttk import * 整个框架的主结构 root = Tk() root.title('贱工坊-进制转换计算'...
  • dx(Android jar转换成dex工具)

    千次下载 热门讨论 2015-12-24 11:54:03
    dx(Android jar转换成dex工具) 使用的命令: dx --dex --output hack_dex.jar hack.jar 工具的使用可以参考:http://blog.csdn.net/qxs965266509/article/details/50390325
  • EOTFast(很好用的字体转换工具)

    千次下载 热门讨论 2013-09-09 08:27:21
    之前找这个软件找的挺辛苦,估计很多人也找不到,所以干脆免费共享,有需要的就拿去用吧,用法很简单,直接把ttf格式的字体拖到下载的exe文件里,就会自动生成eot文件了
  • 六种电平转换的优缺点

    千次阅读 2022-01-09 15:12:36
    作为一名电子设计的硬件工程师,电平转换是每个人都必须面对的的话题,主芯片引脚使用的1.2V、1.8V、3.3V等,连接外部接口芯片使用的1.8V、3.3V、5V等,由于电平不匹配就必须进行电平转换。每个工程师都有自己的 ...
  • 12、pandas 数据类型转换

    千次阅读 2022-02-13 21:42:56
    2、转换数据类型的思路 使用astype()方法强制转化dtype 自定义一个数据转换函数函数 使用pandas内置的tonumeric()和todatetime() 导入数据时转换数据类型 3、astype()函数 df.astype(dtype, copy.
  • 批量转换文件编码格式为UTF-8工具

    千次下载 热门讨论 2012-08-02 16:44:56
    批量转换文件编码格式为UTF-8工具.zip 支持多层文件夹替换! 使用说明: 1.文件根目录:即您要转码的文件所在根目录 2.转码文件目录:即您转码后的文件所在目录 3.转码文件后缀:指[文件根目录]下,需要转码的文件后缀,...
  • bin excel两种文件互相转换

    热门讨论 2012-12-05 13:12:12
    bin excel两种文件互相转换。利用C#编写,主要提供给开发人员使用,可以将bin与xls文件互相转换。 因为xls便于查看,如果xls会使用函数的,可以在xls中再增加函数实现数据计算处理。
  • 一,自动类型的转换 自动类型的转换指的是容量小的数据类型,可以自动转换为容量大的数据类型 char也可以转int 红线表示可以转但是会丢失精度 ,因为他是整数转小数。 特例整形常量时int类型,但是可以自动转...
  • 在Java的日常开发中,会随时遇到需要对时间处理的情况,有些时候是需要将时间Date转为时间戳,或是需要将时间戳TimeStamp转换为时间,于是在此篇文章中都有详细的写法与转换方式。 废话不多说,直接上代码: /** ...
  • LabVIEW十六进制和字符类型转换

    千次阅读 2022-05-03 15:22:39
    在LabVIEW的串口通信中,数据的发送与接收都是基于字符串控件... 字符类型转换为十六进制程序如下所示: 十六进制转换为字符类型程序如下所示: 代码下载:LabVIEW十六进制和字符类型转换-嵌入式文档类资源-CSDN下载 
  • Pandoc:一个超级强大的文档格式转换工具

    万次阅读 多人点赞 2020-09-11 16:20:10
    Pandoc 是一个免费开源的格式转换工具,可以用于各种标记格式文档之间的转换,例如 Markdown 、Microsoft Word、PowerPoint、 Jupyter Notebook、HTML、PDF、LaTeX、Wiki、EPUB。Pandoc 官方称之为该领域中的...
  • 将字符串的时间转换为时间戳方法:a = "2013-10-10 23:40:00"#将其转换为时间数组import timetimeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")# 转换为时间戳:timeStamp = int(time.mktime(timeArray))timeStamp =...
  • 科大讯飞语音文字转换及本地语音合成

    千次下载 热门讨论 2015-01-19 23:21:45
    本资源是一个科大讯飞的语音转换和合成的初级代码,可以去参考
  • 不同数据类型之间的转换

    千次阅读 多人点赞 2022-01-20 20:46:21
    数据类型转换之隐式转换、显示转换 一、隐式类型转换(标准转换) 1、算术转换 在混合类型的表达式中,以最宽的数据类型为目标转换类型,如: int a = 3; double b = 1.12; //表达式 a+b a被转换为double类型 2、...
  • 今天来总结一下各种进制转换问题,详细齐全易于理解,希望对你有帮助哦! 先从我们最熟悉的十进制入手吧,其他进制与十进制的转换方法都是一样的,保证能全部记住! 整型有4种进制形式: 1.十进制: 都是以0-9这九...
  • 进制转换 原理 进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。 基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。 位权是指...
  • 在线订阅转换工具

    千次阅读 2022-01-24 10:34:52
    用过的都说好,没用过的都在找 在线订阅转换ACL4SSR,在线订阅转换,Clash在线订阅转换,在线订阅转换https://now-subconverter-leif0419.vercel.app/ 在线订阅转换ACL4SSR,在线订阅转换,Clash在线订阅转换,在线订阅...
  • 如何免费的、完整的把 PDF 转换为 Word?

    万次阅读 多人点赞 2021-09-27 09:21:45
    你有没有遇到过要将PDF转换为Word需求的时候,找了一大堆工具,进行转换发现有一些转换不了,有一些转换限制,需要付费才能全部转换完成。我最近也是遇到有一个需求需要将PDF转换为Wold,找了好几个工具都是收费的...
  • java类型转换工具类Convert

    千次阅读 2019-09-16 21:15:28
    * 如果给定的值为<code>null,或者转换失败,返回默认值<code>null</code><br> * 转换失败不会报错 * * @param value 被转换的值 * @return 结果 */ public static String toStr(Object value) { return ...
  • 一、 自动类型转换(隐式类型转换) 整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。 自动转换从低级到高级。 自动转换有以下规律: 1、小的类型自动转化为...
  • 51单片机学习笔记——AD转换

    千次阅读 多人点赞 2020-05-13 19:14:52
    一、AD转换器的分类 直接A/D转换器 并行比较型 优点:转换速度快,内含寄存器,无需附加采样-保持电路。 缺点:需要很多电压比较器和触发器,高分辨率较难制造。 反馈比较型 分为计数型和逐次比较型,计数型又被...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,957,967
精华内容 2,383,186
关键字:

转换

友情链接: heima-estate.zip