如何从C#中的字符串中获取字节数组?我想将一个字符串传递给这个方法.
我怎样才能在ServiceStack.OrmLite代码中首先使用nText数据类型?
public class Email
{
[AutoIncrement]
public long ID { get; set; }
public DateTime Date { get; set; }
public string From { get; set; }
public string Subject { get; set; }
nText =>
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我使用字符串数据类型,ormlite在数据库中生成nVarchar(8000)
我需要超过8000个字符的数据
我试图区分"文本文件"和"二进制"文件,因为我实际上想忽略具有"不可读"内容的文件.
我有一个我认为是GZIP档案的文件.我想通过检测魔术数字/文件签名来忽略这种文件.如果我用Notepad ++中的Hex编辑器插件打开文件,我可以看到前三个十六进制代码1f 8b 08.
但是,如果我使用a读取文件StreamReader,我不知道如何获取原始字节..
using (var streamReader = new StreamReader(@"C:\file"))
{
char[] buffer = new char[10];
streamReader.Read(buffer, 0, 10);
var s = new String(buffer);
byte[] bytes = new byte[6];
System.Buffer.BlockCopy(s.ToCharArray(), 0, bytes, 0, 6);
var hex = BitConverter.ToString(bytes);
var otherhex = BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(s.ToCharArray()));
}
Run Code Online (Sandbox Code Playgroud)
在using语句的末尾,我有以下变量值:
hex: "1F-00-FD-FF-08-00"
otherhex: "1F-EF-BF-BD-08-00-EF-BF-BD-EF-BF-BD-0A-51-02-03"
Run Code Online (Sandbox Code Playgroud)
两者都不以Notepad ++中显示的十六进制值开头.
是否可以通过读取文件的结果获取原始字节StreamReader?
我正在将一些代码从C#转换为VB.NET.我在C#中有以下行
var bytes = new byte[password.Length * sizeof(char)];
Run Code Online (Sandbox Code Playgroud)
在MSDN上看来,VB.NET似乎没有sizeof运营商.我知道有一个Marshal.SizeOf但是进一步的MSDN文档声明返回的值可能与之不同sizeof.
有人可以帮忙吗?在VB.NET中是否有相同的声明?
附加信息
我的目标是将密码转换为字节数组,然后我可以散列,然后存储在数据库中或与之前存储的散列进行比较.但我不一定想得到与我的具体情况有关的答案.
Dim bytes(password.Length * xxx) As Byte
System.Buffer.BlockCopy(password.ToCharArray(), 0, bytes, 0, bytes.Length)
Dim sha512 = System.Security.Cryptography.SHA512.Create()
Dim hash = sha512.ComputeHash(bytes)
' compare hash or stroe in database
Run Code Online (Sandbox Code Playgroud) 可能重复:
.NET字符串到字节数组C#
如何将String转换为byte []数组,反之亦然?我需要将字符串存储在一些二进制存储中.请在两个方向上显示示例.还有一件事:每个字符串可能大于90Kb.
有没有办法让 varbinary 在 SQL Server 中接受文本数据?
这是我的情况。我有相当大量的 XML,我计划以“压缩”格式存储它们。(这意味着 Varbinary。)
但是,当我进行调试时,我希望能够翻转配置开关并以纯文本形式存储,以便我可以从数据库进行故障排除(即不需要客户端应用程序来解压缩)。
是否可以将普通文本插入到 varbinary(max) 中?
我正在尝试通过IHttpHandler传输文件,代码非常简单.但是,当我开始单次传输时,它占用了大约20%的CPU.如果我将其扩展为20个同时传输,则CPU非常高.有没有更好的方法可以做到这一点来保持CPU更低?客户端代码一次只发送64KB的文件块.
public void ProcessRequest(HttpContext context)
{
if (context.Request.Params["secretKey"] == null)
{
}
else
{
accessCode = context.Request.Params["secretKey"].ToString();
}
if (accessCode == "test")
{
string fileName = context.Request.Params["fileName"].ToString();
byte[] buffer = Convert.FromBase64String(context.Request.Form["data"]);
string fileGuid = context.Request.Params["smGuid"].ToString();
string user = context.Request.Params["user"].ToString();
SaveFile(fileName, buffer, user);
}
}
public void SaveFile(string fileName, byte[] buffer, string user)
{
string DirPath = @"E:\Filestorage\" + user + @"\";
if (!Directory.Exists(DirPath))
{
Directory.CreateDirectory(DirPath);
}
string FilePath = @"E:\Filestorage\" + user + @"\" + fileName;
FileStream writer = new …Run Code Online (Sandbox Code Playgroud) 我从源接收系统IO流.我将继续使用流对象,只要它包含字符串"MSTND".
我意识到除非我将它转换为字符串,否则我在流上无能为力.字符串转换仅用于子字符串匹配.但我不想做任何占用大量时间或空间的事情.时间/空间密集是如何从Stream转换为字符串仅用于子字符串匹配?
我写的代码是:
private bool StreamHasString (Stream vStream)
{
bool containsStr = false;
byte[] streamBytes = new byte[vStream.Length];
vStream.Read( streamBytes, 0, (int) vStream.Length);
string stringOfStream = Encoding.UTF32.GetString(streamBytes);
if (stringOfStream.Contains("MSTND"))
{
containsStr = true;
}
return containsStr ;
}
Run Code Online (Sandbox Code Playgroud) 我在解析具有 utf-16 编码的 XML 时遇到问题,但它与 utf-8 完美配合。
任何人都可以帮助我解决这个问题吗?
我收到以下错误:
System.Web.HttpUnhandledException' was thrown.
System.Xml.XmlException: There is no Unicode byte order mark.
Cannot switch to Unicode
XML 标头:
<?xml version="1.0" encoding="utf-16"?>
<RiskAssessmentRequestValue xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Run Code Online (Sandbox Code Playgroud)
C# 代码隐藏:
rptTransformedXml.DataSource = parser.ExtractData(xml);
rptTransformedXml.DataBind();
public List<XmlDataExtract> ExtractData(string xml)
{
MemoryStream stream = new MemoryStream(Encoding.ASCII.GetBytes(xml));
return ExtractData(stream);
}
public List<XmlDataExtract> ExtractData(Stream xmlStream)
{
XmlReaderSettings settings = new XmlReaderSettings
{
IgnoreComments = true,
IgnoreWhitespace = true,
CloseInput = true
};
XmlReader reader = XmlReader.Create(xmlStream, settings);
XmlPathBuilder pathBuilder = …Run Code Online (Sandbox Code Playgroud) 我有一个XML文件,它来自数据库(Oracle 11g Unicode)表的导出.该表有一个表示文件的BLOB字段.该文件可能非常大.
因此,在我有一个非常大的文件的情况下,在XML中获取该文件的非常大的字符串表示.
我必须获取此字符串的字节,以便将文件插入另一个数据库实例中.
在这一点上,XML被收费,然后我有一个代表该文件的字符串.
我做的是这样的:
Encoding.Unicode.GetBytes(stringFileRepresentation);
但我得到了一个OutOfMemoryException.
如果我这样做:
Encoding.Unicode.GetBytes(stringFileRepresentation.ToCharArray());
我也得到了OutOfMemoryException.
在解码字符串之前我也尝试过这样做:
var chars = stringFileRepresentation.ToCharArray();
Encoding.Unicode.GetBytes(chars);
Run Code Online (Sandbox Code Playgroud)
而且我正在接听OutOfMemoryException电话ToCharArray().
所以我觉得在处理字符串时会出现问题.
然后我正在尝试我在这里发现的以下方法事件,如果我不确定我必须保护字符串的编码:
byte[] bytes = new byte[str.Length * sizeof(char)];
Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
Run Code Online (Sandbox Code Playgroud)
但我也在OutOfMemoryException实例化bytes变量.
现在,我跑了OutOfOptions,我不知道该怎么办.
c# ×9
.net ×5
string ×3
asp.net ×2
sql-server ×2
.net-4.0 ×1
binary ×1
byte ×1
bytearray ×1
code-first ×1
copy ×1
cryptography ×1
encoding ×1
ihttphandler ×1
servicestack ×1
sizeof ×1
stream ×1
t-sql ×1
text ×1
varbinary ×1
vb.net ×1
web-services ×1
xml ×1
xml-parsing ×1
xmlreader ×1