将int值赋给char

时间:2015-11-02 11:34:52

标签: types d

在学习C ++和D时,我试图通过测试两种语言中的一些代码来比较易用性。

所以,在C ++中,我有类似的东西(没有显示完整的C ++代码,仅用于演示):

char src[] = "some10char";
char des[];

for (int i=0; i<1000; i++)
{
    src[9] = '0' + i % (126 - '0');
    des = src;
}

在&#39;伪&#39;上面,for循环体中的第一行不仅指定int值,还试图避免不可打印的值。

我怎么能在D中做同样的事?

到目前为止,我已设法将int投反对char而且我不知道我是否已正确使用它:

char[] src = "some10char".dup;
char[] dst;

for (int i=0; i<1000; i++)
{   
    if (i<15) 
        src[src.length-1] = cast(char)(i+15);
    else
        src[src.length-1] = cast(char)(i);

    dst = src.dup // testing also dst = src;
}

2 个答案:

答案 0 :(得分:4)

更多惯用的D代码:

char[] source = "some10char".dup; // or cast(char[])"some10char";
char[] destination; // = new char[source.length];

foreach (i; 0 .. 1000)
{
    source[$ - 1] = cast(char)('0' + i % (126 - '0'));

    destination = source.dup; // dup will allocate every time
    //destination[] = source[]; // copying, but destination must have same length as source
}

答案 1 :(得分:3)

您可以添加和减去D中的字符文字,就像在c ++示例中一样,例如:

import std.stdio;

char[] str;

void main(string[] args)
{
    for(int i=0; i<1000; i++)
    {
        str ~= cast(char)( i % (0x7F - '0') + '0') ;
    }
    writeln(str);
}

仅打印0上的ascii字符且小于0x7F。该字符被隐式转换为int,然后i(它本身给出int)的最终操作被明确地转换为char(因此modulo / mask由0xFF)。< / p>