Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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# 是否将VFP WRITETEXT/READTEXT转换为字节[]?_C# - Fatal编程技术网

C# 是否将VFP WRITETEXT/READTEXT转换为字节[]?

C# 是否将VFP WRITETEXT/READTEXT转换为字节[]?,c#,C#,我遇到了一个有趣的情况。使用20年前编写的旧Visual Fox Pro 9应用程序,该应用程序使用SQL Server 2008(以及以上版本,具体取决于客户端)。 当时,他们选择将MicrosoftWord文档的内容(字节而不是文本提取)保存到SQLServer中的文本列中。在Fox Pro中,应用程序读取 使用READTEXT的字节和使用WRITETEXT的写入。这些文档以这种方式在应用程序中的多个位置引用。所以现在,它真的不是 对我来说,通过添加一个varbinary(max)列来纠正这

我遇到了一个有趣的情况。使用20年前编写的旧Visual Fox Pro 9应用程序,该应用程序使用SQL Server 2008(以及以上版本,具体取决于客户端)。 当时,他们选择将MicrosoftWord文档的内容(字节而不是文本提取)保存到SQLServer中的文本列中。在Fox Pro中,应用程序读取 使用READTEXT的字节和使用WRITETEXT的写入。这些文档以这种方式在应用程序中的多个位置引用。所以现在,它真的不是 对我来说,通过添加一个varbinary(max)列来纠正这个问题是可行的,并且只需修复数据,而不会在更改时引入大量风险 Fox Pro应用程序中的大量位置。我所处的最后期限只是将此作为一种选择

真正的问题是,我们引入了支持.NET的应用程序,这些应用程序与同一个数据库交互,这是我们离开数据库的一部分 福克斯专业版。我在将此列的DataTable中返回的巨大字符串转换为字节[]时遇到问题。当然,要想拯救世界也会有困难 以相同的格式通过.NET返回文档,这样我就不会破坏Fox Pro应用程序

我猜这与编码有关,但我尝试过的基本方法,例如base64,将其编码为字节[],但它不起作用。这是 开始每个文档的字符串的小片段:

“7B5C727466315C616465666C616E673130132355C616E73695C”

巨大字符串的其余部分是相同的字母数字值集。有人能告诉我将转换成字节[]和[]的正确方向吗
然后回到这个乱七八糟的地方?

它看起来像十六进制:
7B 5C 72 74 66
等等,当转换回文本时,我得到了这样的结果:
{\rtf1\adeflang1025\ansi\
。所以它看起来像是用十六进制字节写和读RTF文档

您可以尝试将以下代码从十六进制文本转换回原始字节:

public static void Main()
{
    var hex = "7B5C727466315C616465666C616E67313032355C616E73695C";
    var rtfBytes = FromHex(hex);
    var rtfText = Encoding.ASCII.GetString(rtfBytes);
    Console.WriteLine(rtfText);
}

public static byte[] FromHex(string hex)
{
    var result = new byte[hex.Length / 2];
    for (var i = 0; i < result.Length; i++)
    {
        result[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
    }
    return result;
}
publicstaticvoidmain()
{
var hex=“7B5C727466315C616465666C616E67313032355C616E73695C”;
var rtfBytes=从十六进制(十六进制);
var rtfText=Encoding.ASCII.GetString(rtfBytes);
控制台写入线(rtfText);
}
公共静态字节[]FromHex(字符串十六进制)
{
var结果=新字节[hex.Length/2];
for(变量i=0;i