小编The*_*ern的帖子

文件和该文件内容的 SHA256 生成不同

我使用在线 SHA256 转换器来计算给定文件的哈希值。在那里,我看到了我不明白的效果。

出于测试目的,我想计算一个非常简单的文件的哈希值。我将其命名为“test.txt”,其唯一内容是字符串“abc”,后面是一个新行(我刚刚按了 Enter)。

现在,当我将“abc”和换行符放入 SHA256 生成器时,我得到了哈希值

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

但是当我将完整的文件放入同一个生成器中时,我得到了哈希值

552bab6864c7a7b69a502ed1854b9245c0e1a30f008aaa0b281da62585fdb025

差异从何而来?我使用了这个生成器(事实上,我尝试了几个生成器,它们总是产生相同的结果):

https://emn178.github.io/online-tools/sha256_checksum.html

请注意,如果没有换行符,则不会出现这种差异。如果文件仅包含字符串“abc”,则哈希为

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

对于文件以及内容。

sha256

5
推荐指数
1
解决办法
2607
查看次数

如果参数是 T,转换为 T 会失败吗?

到目前为止,我一直认为,如果我检查参数是否“是”T,那么强制转换“as”T 应该是安全的。所以这总是会成功并且永远不会为空:

if (myParam is MyClass)
{
    MyClass instance = myParam as MyClass;
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器警告我右侧可能为空:

“CS8600:将 null 文字或可能的 null 值转换为不可为 null 的类型。”

这真的会发生吗?还是编译器根本没有得到前面的检查?如果它仍然可以为空,这怎么可能呢?

根据微软文档,这似乎不可能: https://learn.microsoft.com/en-au/dotnet/csharp/language-reference/operators/type-testing-and-cast

形式的表达

东方

其中 E 是返回值的表达式,T 是类型或类型参数的名称,产生与以下相同的结果

E 是 T 吗?(T)(E) : (T)空

注意:(我以一种相当复杂的方式将 myParam 作为泛型类中的参数;原则上,如果需要的话,只要付出一点努力,我就可以创建一个最小的示例,但到目前为止我很确定,不存在这种情况演员阵容可能会失败。)

c# casting

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

标签 统计

c# ×1

casting ×1

sha256 ×1