static_cast用于将int转换为char

时间:2018-03-11 15:00:37

标签: char int data-conversion static-cast

我已编写此代码将Decimal转换为二进制:

string Solution::findDigitsInBinary(int A) {
if(A == 0 )
    return "0" ;
else
{
string bin = "";
while(A > 0)
{
    int rem = (A % 2);
    bin.push_back(static_cast<char>(A % 2));
    A = A/2 ;
}    
reverse(bin.begin(),bin.end()) ;
return bin ;
}
}

但是没有使用static_cast获得所需的结果。

我已经看到了与此相关的一些东西,它给出了理想的结果:

(char)('0'+ rem).

static_cast有什么区别?为什么我没有得到正确的二进制输出?

1 个答案:

答案 0 :(得分:0)

使用:

(char) '0' + rem;

重要的区别不在于演员表,而是总是导致0或1的余数被添加到字符'0',这意味着您将“0”或“1”字符添加到您的串。

在您的版本中,您要添加0或1的整数表示形式,但0和1的字符串表示形式为48或49.通过将0或1的余数添加到“0”,它给出的值为48(字符0)或49(字符1)。

如果你在代码中做同样的事情,它也会起作用。

string findDigitsInBinary(int A) {
    if (A == 0)
        return "0";
    else
    {
        string bin = "";
        while (A > 0)
        {
            int rem = (A % 2);
            bin.push_back(static_cast<char>(A % 2 + '0')); // Remainder + '0'
            A = A / 2;
        }
        reverse(bin.begin(), bin.end());
        return bin;
    }

基本上你应该在字符串中添加字符,而不是数字。所以你不应该在字符串中添加0和1,你应该添加数字48(字符0)和49(字符1)。

enter image description here

此图表可能会更好地说明。看看字符值/数字'0'是十进制的48?我们只是说你想将数字4添加到字符串中,然后因为小数48为0,那么你实际上想要将小数值52添加到字符串48 + 4中。这就是'0'+ rem确实。如果你插入一个角色,这就是你自动完成的,也就是说,如果你这样做:

mystring += 'A';

它会在你的字符串中添加一个'A'字符,但它实际上在实际做的是将'A'转换为十进制65并将其添加到字符串中。您的代码中包含的是添加十进制数/整数0和1,而这些不是Unicode / ASCII表示中的字符。

现在您已了解字符的编码方式,将整数转换为char不会将十进制/整数更改为其字符表示形式,但它会将数据类型从int更改为char,这是一种4字节的数据类型(大多数可能)为1字节数据类型。你的演员表演了以下内容:

在模数%运算之后,你得到1或0作为整数的结果,让我们假设你得到1个余数,它看起来像是一个int:

00000000 00000000 00000000 00000001

在转换为char之后,它会将其转换为单字节数据类型,这将使​​它看起来像这样:

00000001 // Now it's a one-byte data type

尽管'1'数字看起来像编码为字符串字符是49,看起来像这样:

00110000

至于static_cast和c-style强制转换之间的区别,static_cast会进行编译时检查,并允许基于特定规则在某些类型之间进行强制转换,而c样式强制转换则不具有限制性。

char a = 5;
int* p = static_cast<int*>(&a); // Will not compile
int* p2 = (int*)&a; // Will compile and run, but is discouraged as there are risks.
*p2 = 7; // You've written past the single byte char into 3 extra bytes, which is an access violation, or undefined behaviour.