我正在尝试将某些.NET 4.6代码降级到.NET 4.5.
这是我正在使用的代码块:
fixed (byte* destination = dataBytes)
{
Buffer.MemoryCopy(data, destination, dataLength, dataLength);
}
Run Code Online (Sandbox Code Playgroud)
data是byte*类型所以我不知道是否Buffer.BlockCopy()是一个合理的替代,因为它接受数组.
有任何想法吗?
我有一些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的Iirc,您可以按照以下方式发表声明:
char* str = "1234";
int nonStr = *((int*)str);
Run Code Online (Sandbox Code Playgroud)
(我故意将字符串设为4个字符,因此在平均情况下它将具有与整数相同的字节数.)这将取消引用存储的内存,str如果是整数522207554则给出值(如果我进行了转换)对).
有没有办法在C#中做同样的事情?我知道这是一个低级别的内存操作,通常对C#程序员来说是幸福的,我只是在做一个教学练习.
引用的代码来自这个答案,但类似的代码几乎无处不在。假设我们需要使用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?
所以我在SSIS ScriptCalled中有一列Data类型BlobColumn
我想将此列分配给一个string值。
我执行以下操作:
Row.Data = "MyString";
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
无法将类型'string'隐式转换为Microsoft.SqlServer.Dts.Pipeline.BlobColumn
那么我如何BlobColumn为一个String值赋值呢?
我正在编写一个应用程序,它将接收加密的字节数组,其中包含文件名和文件字节,使用以下协议: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) 首先:抱歉我的英语不好!
我知道标题不是最好的英文,但我真的不知道如何格式化这个问题...
我想要做的是逐行读取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)
如果我想从外部文件中读取它,但是当我想读取字符串或字符串构建器时它不起作用,那么这种方法是完美的,你如何逐行阅读?
这是我的代码:
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
我如何解决这个问题,所以我可以将我的字节数组转换为字符串,还是有更好的方法将字节数组转换为字符串?
我知道这是一个经常被问到的问题,我没有明确的答案将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但是没有发现任何.有人帮我解决这个问题.
如何从字符串中获取前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)