相关疑难解决方法(0)

.NET 4.6之前的Buffer.MemoryCopy的最佳替代方案

我正在尝试将某些.NET 4.6代码降级到.NET 4.5.

这是我正在使用的代码块:

fixed (byte* destination = dataBytes)
{
    Buffer.MemoryCopy(data, destination, dataLength, dataLength);
}
Run Code Online (Sandbox Code Playgroud)

databyte*类型所以我不知道是否Buffer.BlockCopy()是一个合理的替代,因为它接受数组.

有任何想法吗?

.net c#

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

C#字节数组为字符串,反之亦然

我有一些C++代码通过STL字符串和文本i/o将字节值保存到文件中,并且对如何在C#中执行此操作感到困惑.

首先,我将字节数组转换为字符串并将每个数组存储为文本文件中的一行:

 StreamWriter F
 loop
 {
   byte[] B;       // array of byte values from 0-255 (but never LF,CR or EOF)
   string S = B;   // I'd like to do this assignment in C# (encoding? ugh.) (*)
   F.WriteLine(S); // and store the byte values into a text file
 }
Run Code Online (Sandbox Code Playgroud)

稍后...我想反转步骤并取回原始字节值:

  StreamReader F;   
  loop
  {
    string S = F.ReadLine();   // read that line back from the file
    byte[] B = S;              // I'd like to convert back to byte array (*)
  } …
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
1万
查看次数

强制执行内存级别

来自C的Iirc,您可以按照以下方式发表声明:

char* str = "1234";
int nonStr = *((int*)str);
Run Code Online (Sandbox Code Playgroud)

(我故意将字符串设为4个字符,因此在平均情况下它将具有与整数相同的字节数.)这将取消引用存储的内存,str如果是整数522207554则给出值(如果我进行了转换)对).

有没有办法在C#中做同样的事情?我知道这是一个低级别的内存操作,通常对C#程序员来说是幸福的,我只是在做一个教学练习.

c# memory casting low-level

3
推荐指数
1
解决办法
1033
查看次数

为什么哈希字符串的示例通常使用 Encoding.UTF8?

引用的代码来自这个答案,但类似的代码几乎无处不在。假设我们需要使用System.Security.Cryptography.HashAlgorithm.ComputeHash()接受byte[]. 典型的代码是这样的:

public static byte[] GetHash(string inputString)
{
    HashAlgorithm algorithm = MD5.Create();  // SHA1.Create()
    return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
Run Code Online (Sandbox Code Playgroud)

字符串在内部存储为 Unicode。

为什么Encoding.UTF8用 代替Encoding.Unicode

.net c# unicode hash encoding

3
推荐指数
1
解决办法
1685
查看次数

如何在SSIS中将字符串转换为BlobColumn

所以我在SSIS ScriptCalled中有一列Data类型BlobColumn

我想将此列分配给一个string值。

我执行以下操作:

Row.Data = "MyString";
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

无法将类型'string'隐式转换为Microsoft.SqlServer.Dts.Pipeline.BlobColumn

那么我如何BlobColumn为一个String值赋值呢?

c# sql-server ssis

3
推荐指数
1
解决办法
5926
查看次数

与 Base64 和 ASCII 不同,在写入文件时,为什么 UTF8 编码会更改/损坏字节?

我正在编写一个应用程序,它将接收加密的字节数组,其中包含文件名和文件字节,使用以下协议:file_name_and_extension|bytes。然后对字节数组进行解密并传入Encoding.UTF8.getString(decrypted_bytes)会更好,因为我想file_name_and_extension从接收到的字节中进行修剪以将实际文件字节保存到file_name_and_extension.

我简化了我的应用程序,只接收文件,bytes然后Encoding.UTF8.GetString()使用Encoding.UTF8.getBytes(). 之后,我尝试编写一个 zip 文件,但该文件无效。它在使用ASCII或时有效Base64

private void Decryption(byte[] encryptedMessage, byte[] iv)
{
    using (Aes aes = new AesCryptoServiceProvider())
    {
        aes.Key = receiversKey;
        aes.IV = iv;
        // Decrypt the message
        using (MemoryStream decryptedBytes = new MemoryStream())
        {
            using (CryptoStream cs = new CryptoStream(decryptedBytes, aes.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(encryptedMessage, 0, encryptedMessage.Length);
                cs.Close();

                string decryptedBytesString = Encoding.UTF8.GetString(decryptedBytes.ToArray()); //corrupts the zip
                //string decryptedBytesString = Encoding.ASCII.GetString(decryptedBytes.ToArray()); //works
                //String …
Run Code Online (Sandbox Code Playgroud)

c# encoding utf-8

3
推荐指数
1
解决办法
2808
查看次数

像StreamReader一样读取字符串

首先:抱歉我的英语不好!

我知道标题不是最好的英文,但我真的不知道如何格式化这个问题...
我想要做的是逐行读取HTML源代码,这样当它看到一个给定的单词时(比如http://)它复制整个句子,所以我可以剥去其余的只保留URL.

这就是我尝试过的:

using (var source = new StreamReader(TempFile))
{
    string line;
    while ((line = source.ReadLine()) != null)
    {
        if (line.Contains("http://"))
        {
            Console.WriteLine(line);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想从外部文件中读取它,但是当我想读取字符串或字符串构建器时它不起作用,那么这种方法是完美的,你如何逐行阅读?

c# streamreader

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

尝试将字节数组转换为字符串时出错..... c#

这是我的代码:

byte[] base64String = //this is being set properly
var base64CharArray = new char[base64String.Length];
Convert.ToBase64CharArray(base64String,
                          0,
                          base64String.Length,
                          base64CharArray,
                          0);
var Base64String = new string(base64CharArray);
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我在调用时收到以下错误Convert.ToBase64CharArray:

偏移量不是指字符串中的位置,或者目标字符数组的长度不足.参数名称:offsetOut

我如何解决这个问题,所以我可以将我的字节数组转换为字符串,还是有更好的方法将字节数组转换为字符串?

c# .net-4.0

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

将std :: string或string ^转换为c ++/cli中的字节数组

我知道这是一个经常被问到的问题,我没有明确的答案将std :: string或String ^转换为字节数组,以便写入流进行tcp通信.

这就是我尝试过的

bool CTcpCommunication::WriteBytes(const std::string& rdatastr)
{
  bool retVal = false;

  try
  {
    if (static_cast<NetworkStream^>(stream) != nullptr)
    {
      array<Byte>^data = System::Text::Encoding::ASCII->GetBytes(rdatastr); 
      stream->Write( data, 0, data->Length ); 
    }
  }
  catch(Exception^)
  {
    // Ignore, just return false
  }
  return retVal;
}
Run Code Online (Sandbox Code Playgroud)

我知道这里GetBytes不会工作,我也检查了编组选项,将std:string转换为.NET String但是没有发现任何.有人帮我解决这个问题.

.net sockets string c++-cli tcpclient

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

从字符串C#获取前30个字节

如何从字符串中获取前30个字节?

例如:string phone = "My name is ???? blah blah";然后

函数返回“我的名字”(30个字节)感谢您的帮助。

BinaryFormatter bf = new BinaryFormatter();
byte[] bytes;
MemoryStream ms = new MemoryStream();
string orig = "? Hello ?? Thank You";
bf.Serialize(ms, orig);
ms.Seek(0, 0);
bytes = ms.ToArray();
MessageBox.Show("Original bytes Length: " + bytes.Length.ToString());
MessageBox.Show("Original string Length: " + orig.Length.ToString());
Run Code Online (Sandbox Code Playgroud)

c# string byte

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