Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将结果存储在变量中会产生奇怪的结果_C_Fat32_Fat - Fatal编程技术网

C 将结果存储在变量中会产生奇怪的结果

C 将结果存储在变量中会产生奇怪的结果,c,fat32,fat,C,Fat32,Fat,我有一段代码,有时会产生正确的结果。唯一的区别是我将结果存储在一个中间变量中 整体功能特征是: FS\u FATEntry getFATEntryForCluster(FS\u集群集群,FS\u实例*fsi) 这项工作: switch (fsi->type) { case FS_FAT12: if (cluster % 2) return ((*((uint16_t *)&FATSector[entOffset])) >>

我有一段代码,有时会产生正确的结果。唯一的区别是我将结果存储在一个中间变量中

整体功能特征是:

FS\u FATEntry getFATEntryForCluster(FS\u集群集群,FS\u实例*fsi)

这项工作:

switch (fsi->type) {
    case FS_FAT12:
        if (cluster % 2)
            return ((*((uint16_t *)&FATSector[entOffset])) >> 4);
        else
            return ((*((uint16_t *)&FATSector[entOffset])) & 0x0FFF);
    case FS_FAT16:
        return (*((uint16_t *)&FATSector[entOffset]));
    case FS_FAT32:
        return ((*((uint32_t *)&FATSector[entOffset])) & 0x0FFFFFFF);
}
这不是:(请注意,FS_FATEntry的类型定义为
uint32\u t

当运行第二段代码时,这是我得到的输出的一小部分:

Cluster 00F9 : FB0FA0 Entry
Cluster 00FA : D0FC0FB Entry
Cluster 00FB : FD0FC0 Entry
Cluster 00FC : F0FE0FD Entry
Cluster 00FD : FF0FE0 Entry
Cluster 00FE : 11000FF Entry
Cluster 00FF : 1011000 Entry
Cluster 0100 : 3102101 Entry
Cluster 0101 : 1031021 Entry
Cluster 0102 : 5104103 Entry
Cluster 0103 : 1051041 Entry
Cluster 0104 : 7FFF105 Entry
Cluster 0105 : 107FFF1 Entry
Cluster 0106 : FFFF107 Entry
Cluster 0107 : FFFFFF1 Entry
Cluster 0108 : B10AFFF Entry
Cluster 0109 : 10B10AF Entry
Cluster 010A : D10C10B Entry
Cluster 010B : 10D10C1 Entry
Cluster 010C : F10E10D Entry
Cluster 010D : FFF10E1 Entry
Cluster 010E : 1110FFF Entry
Cluster 010F : 111110F Entry

原始代码从每个案例返回,新代码通过。。。你是不是打算在开关上失灵

原始代码从每个案例返回,新代码通过。。。你是不是打算在开关上失灵

“这是输出的一小部分”。您需要做的不仅仅是转储输出。您需要解释您希望我们注意的输出是什么。我猜这在某种程度上是错的。那么请告诉我们实际输出应该是什么。您真的应该提供代码的一个版本。@kaylum我将添加预期的输出。MWE将非常困难,因为它需要许多文件,而FAT12磁盘映像可能不需要。看来你已经有了一个很好的答案。但是要注意改进以后的问题。所有的
*(T*)
都违反了严格的别名rule@M.M你能详细说明一下吗?这是微软FAT12/16/32白皮书中给出的“这是输出的一个小插曲”。您需要做的不仅仅是转储输出。您需要解释您希望我们注意的输出是什么。我猜这在某种程度上是错的。那么请告诉我们实际输出应该是什么。您真的应该提供代码的一个版本。@kaylum我将添加预期的输出。MWE将非常困难,因为它需要许多文件,而FAT12磁盘映像可能不需要。看来你已经有了一个很好的答案。但是要注意改进以后的问题。所有的
*(T*)
都违反了严格的别名rule@M.M你能详细说明一下吗?微软FAT12/16/32白皮书就是这样给出的,我不这么认为!接得好-我要说的是,我在开关上摔坏了一只Go,我已经做了很多次了,我不想记得了。我不这么认为!接得好——我要说的是,一只在开关上掉下来的Go是,我做过的次数比我想起来的要多。
Cluster 00F9 : FB0FA0 Entry
Cluster 00FA : D0FC0FB Entry
Cluster 00FB : FD0FC0 Entry
Cluster 00FC : F0FE0FD Entry
Cluster 00FD : FF0FE0 Entry
Cluster 00FE : 11000FF Entry
Cluster 00FF : 1011000 Entry
Cluster 0100 : 3102101 Entry
Cluster 0101 : 1031021 Entry
Cluster 0102 : 5104103 Entry
Cluster 0103 : 1051041 Entry
Cluster 0104 : 7FFF105 Entry
Cluster 0105 : 107FFF1 Entry
Cluster 0106 : FFFF107 Entry
Cluster 0107 : FFFFFF1 Entry
Cluster 0108 : B10AFFF Entry
Cluster 0109 : 10B10AF Entry
Cluster 010A : D10C10B Entry
Cluster 010B : 10D10C1 Entry
Cluster 010C : F10E10D Entry
Cluster 010D : FFF10E1 Entry
Cluster 010E : 1110FFF Entry
Cluster 010F : 111110F Entry