在CSDN有偿问一个代码问题,结果被一个回答者给骂了!事情的起因是我在使用C#解析一个由VB6写入的二进制文件时发现解析的数据总是不完整,捣鼓了很久也没有成功解析出来,后来发现,原来VB6的二进制写入和C#的二进制写入有些许区别,所以,读取方式和C#也有区别,因为前期浪费了很多时间,所以我就决定在CSDN上发帖,有偿请教一些既懂C#又懂VB6的人来解决问题。

打开网易新闻 查看更多图片

CSDN的问答版块是可以发布有偿求助帖的,在此之前我其实已经通过AI大致找到了解决问题的方向,但是所有AI都不能给我细致且正确的回答,加上我工作比较紧张,我就选择了暂时放下这块的逻辑,在CSDN上发了一个有偿帖子以后就去干别的事情了!

很快,一大堆AI回答就全部挤上了我发布的帖子,我看他们的回答几乎都是跟我之前问AI的回答是差不多的!其中,有一名网友问我可以不可以远程调试,于是我就答应了!

最后,这个网友通过远程调试帮我分析了这个由VB6生成的二进制文件,发现这个二进制文件的字符串长度不是固定的,而如果通过C#的Marshal对象去解析这个由VB6生成的二进制文件并转换成结构体的话,是需要指定对象长度的,因此,直接使用Marshal对象不可行。

这其实跟我之前问AI得到的答复差不多,只不过他说得更加详细一些,他发现这个二进制文件大部分内容的结尾都是以\0结束的,因此,给我提供的思路就是把所有字段以\0进行分割,最后按照顺序一个一个值得去读取!

其实,他给我的解决方案我最开始就已经注意到了,并且也尝试过,但是,这个二进制文件里面还有一个特殊的地方,那就是有三个字符串字段并不是以\0结束的,并且,因为字段长度是可变的,因此,会导致字节错位,尽管其他字段都可以使用\0的方式分割出来,但是这三个字符串字段的分割却成了一个问题。

打开网易新闻 查看更多图片

此时,我不知道这是不是最终方案,但是目前的方案对于我来说是解决不了问题的。

可是,此时已经过去了一天时间,我的帖子已经被大量的AI回答给占据了,我一个一个看了以后,发现所有回答都不在点子上!所以,为了让问题继续得到解决,我又重新发了一个有偿帖子,并且注明了需要远程解决问题,不接受AI回答,原先的帖子还继续放在那没有动!

但没过多久,就有一个网友说可以帮我远程看,也就是这个人帮我解决了问题。

他告诉我解决问题的思路很简单,那就是那三个字符串对象虽然没有以\0结尾,但是在每个字符串前面其实都是有一个长度标记的。

打开网易新闻 查看更多图片

其实只需要使用C#的BinaryReader对象去按照顺序一个一个读取值就可以,但是,区别就是,当读取到字符串值的时候,需要先获取下字符串值的长度,然后截取byte值,最终将byte值转换成字符串类型即可。对于其他类型的值,只需要使用BinaryReader对象的ReadDouble、ReadInt32、ReadInt16、ReadSingle等一个一个按照字段在结构体中的顺序读就行。

其实这个方法我之前也是知道的,只不过不知道的是字符串前面竟然还有一个表示长度的标记。虽然这个标记我以前早就注意到了,但是问了某个AI以后,这个AI的解释是,这只是二进制文件的开始标记而已,就像\0是结束标记一样,现在想想,这个AI误导我很严重。

但话说回来,第二个网友跟第一个网友不一样的地方就在于,第二个网友在远程捣鼓了一圈以后,表示想要分析我给他提供的二进制文件可能需要一段时间,我也不想浪费时间,于是问他,能不能直接编写一个C#解析这个二进制文件的代码给我,他答应了,但是要额外增加报酬,我觉得这个要求不过分,谁的时间都是时间,一商量之下,以100元成交,并且,问题解决后,之前发的有偿帖子的收入也给他。

打开网易新闻 查看更多图片

大约一个小时左右吧,他就直接扔给我一个C#解析这个二进制文件的代码给我,我看了下逻辑,没有试我就感觉到了他写的肯定是对的!最后,问题成功解决!

打开网易新闻 查看更多图片

问题解决后,我选择对我之前发的帖子进行结贴,第二个帖子的收入我给了第二个网友,但是第一个帖子的收入让我犯了难。

主要是因为第一个帖子的那个回答者其实并没有解决掉我的问题,或许他说的是我没理解清楚,但他也没有像第二位回答者那样直接给我代码,我也考虑过他“没有功劳也有苦劳”,但是,细想之下,如果所有人不管能不能解决我的问题,我都给报酬的话,那也没有这个道理,加之这个问题本身就不复杂,我也付出了一定的酬劳给第二个网友,所以我选择了“无满意回答结贴”,这就意味着这个帖子的佣金将会原路返回到我的钱包里。

本身,我以为这件事情就这么过去了,因为我曾经也是CSDN问答版块的答主,帮人解决问题别人不选择你是很正常的事情,但是,谁知道我却收到了第一个帮我解决问题的人的指责,他指责我选择了“无满意回答结贴”,导致他花了时间但是却一点报酬也没有得到!

结语

我觉得这个事情的逻辑很简单,那就是解决问题的人就该拿到他应得的,这就跟职场一样,如果只考虑“苦劳”不考虑实际结果,我估计老板也不答应吧!

但是,这个事情让我纠结的点也很简单,那就是相比AI,第一个人的确也付出了自己的时间,所以站在他的角度上,我也是不会高兴的,所以,他的心情我可以理解。所以,我在仔细斟酌以后,决定还是把第一个帖子的酬劳发给他,并向他解释下我这么做的理由。

但是,让我没想到的是,他竟然给我拉黑了,这里得说下,当问题解决以后我并没有继续关注帖子的事情,直到四天以后,我才发现我有一条私信,一看之下才发现是他发给我的,言语带着指责,并且还说了不好听的话!

这就让我难受了!

不知道对于此事,您怎么看呢?