none
[如何]截取位元數 RRS feed

  • 問題

  • 各位大大好~~

    因為使用substring, 截取是是位元數, 而非位元組
    若要截取8個位元組, 該怎寫呢?

    Code Snippet

    string sVal = "人生有夢,逐夢踏實";

    sVal.Substring(0, 8);

     

    先謝過各位大大的幫忙~~ 

    2007年7月5日 上午 10:01

解答

  • hi 你好:

                      你可以先用 Encoding.Unicode.GetBytes(字串)

                      把字串轉成位元組^^

                                                                                                              馬小玲

    2007年7月5日 下午 12:49
  •  Fun 寫信:

    大大

    如果值太長,無法放入,就將它截取適當長度放進去

    也就是值不需保持完整性,那要怎麼做呢

     

    Code Snippet

     try
     {
         string aa = "天氣真好";
         byte[] bb = Encoding.Unicode.GetBytes(aa);
         MessageBox.Show(Encoding.Unicode.GetString(bb, 0, 3));
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     

    or

     

     try
     {
         string aa = "天氣真好";
         MessageBox.Show(Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(aa), 0, 3));
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     

    轉成Byte,再去抓~
    2007年9月12日 上午 06:00

所有回覆

  • hi 你好:

                      你可以先用 Encoding.Unicode.GetBytes(字串)

                      把字串轉成位元組^^

                                                                                                              馬小玲

    2007年7月5日 下午 12:49
  • 大大..對型別不太熟...

    請問大大...轉為位元組之後,如何將長度截小呢

    BYTE找不到方法耶

    string v = "你是誰";

    Encoding.Unicode.GetBytes(v).Length

    只得到長度

    謝謝大大
    2007年9月11日 上午 09:37
  •  Fun 寫信:

    各位大大好~~

    因為使用substring, 截取是是位元數, 而非位元組
    若要截取8個位元組, 該怎寫呢?

    Code Snippet

    string sVal = "人生有夢,逐夢踏實";

    sVal.Substring(0, 8);

     

    先謝過各位大大的幫忙~~ 

     

    還不是很清楚你的問題.

    你是希望sVal在Substring(0,8)後,sVal應該剩什麼內容才是你要的?

    2007年9月11日 下午 02:04
  •  

    大大...我想要

    string sVal ="人生有夢"

    因為國字是2個BYTE,要*2

    可是sVal.Substring(0, 8);

    是把一個國字當1來取

     

    假設資料庫欄位大小8,我的"人生有夢,逐夢踏實"

    需要截短再放入

     

    謝謝大大哦

     

    2007年9月11日 下午 02:59
  • 說真的,還是有點一頭霧水.

    string sVal ="人生有夢"

    sVal=sVal.Substring(0, 1);

    這時的sVal="人";

    你所要的截短是什麼的截短? 把"人"切一半?

    那 "測,試" 切長度為4,那"試"不就變亂碼?

     

    資料庫的欄位型態是Bit 長度為8 ?

    怎麼會想到欄位選擇Bit來放"文字"?怎麼不用nchar或是nvarchar之類的欄位型態來放文字?

     

    2007年9月12日 上午 01:47
  •  

    先謝 謝大大這麼NICE幫我

    資料庫欄位類型:varchar,長度:4

    我的工作就是要把值放入這個欄位

    string sVal ="人生有夢,逐夢踏實"

    假設我現在要放的是sVal這個值

    放進去,會發生錯誤,因為長度只有4,可sVal卻超過4

    請教大大,如何將sVal字串截取,成功放入欄位(類型:varchar,長度:4),

     

    謝謝大大哦.如果問的不清楚,還請大大指導..

    謝謝^^

    2007年9月12日 上午 03:28
  •  Fun 寫信:

     

    先謝 謝大大這麼NICE幫我

    資料庫欄位類型:varchar,長度:4

    我的工作就是要把值放入這個欄位

    string sVal ="人生有夢,逐夢踏實"

    假設我現在要放的是sVal這個值

    放進去,會發生錯誤,因為長度只有4,可sVal卻超過4

    請教大大,如何將sVal字串截取,成功放入欄位(類型:varchar,長度:4),

     

    謝謝大大哦.如果問的不清楚,還請大大指導..

    謝謝^^

     

    如果是這樣,建議把varchar的長度加大,因為Substring不是拿來這樣用的.

    Substring是截那些字出來,而不能在內容不變的情況下,把"字串長度變小".

    所以可以不用在Substring上轉了.

     

    如果要用壓縮的方式,這又是另一個話題了,而且較有難度,還要視你的程式架構狀況,這會影響到你要修改的幅度與範圍,而且效能上,多少會有些影響.

     

    像我遇到這個狀況時,基本上我會先看使用者輸入的內容,再考慮能否調資料庫結構.

    有時使用者很可愛,商品描述打: "小雅推薦,商品好用品質好,特價期間只到10月底",其實打:"特價期間2007/10/31".

    打那麼多做什麼.

    2007年9月12日 上午 04:03
  • 大大

    如果值太長,無法放入,就將它截取適當長度放進去

    也就是值不需保持完整性,那要怎麼做呢

    2007年9月12日 上午 04:45
  •  Fun 寫信:

    大大

    如果值太長,無法放入,就將它截取適當長度放進去

    也就是值不需保持完整性,那要怎麼做呢

     

    Code Snippet

     try
     {
         string aa = "天氣真好";
         byte[] bb = Encoding.Unicode.GetBytes(aa);
         MessageBox.Show(Encoding.Unicode.GetString(bb, 0, 3));
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     

    or

     

     try
     {
         string aa = "天氣真好";
         MessageBox.Show(Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(aa), 0, 3));
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }

     

    轉成Byte,再去抓~
    2007年9月12日 上午 06:00
  • 因為使用者可能輸入英文+中文

    所以...

    如果遇到第一種情況是不是直接就是把長度3改為2

    如果遇到第二種情況是不是只能讓使用者少輸入,

    本英文可輸入4個,結果因為中文和英文加在一起,現在只能輸入2個

     

    還是還有其它的方法呢

     

    1.出來的值會是"你口",第二個字會亂碼

    Code Snippet

     

             string v = "你是誰";
             byte[] aa =  Encoding.Unicode.GetBytes(v);//維度6
             show = Encoding.Unicode.GetString(aa,0,3);

     

    2.出來的值會只剩"ab"

    Code Snippet

     

             string v = "abc你是誰";
             byte[] aa =  Encoding.Unicode.GetBytes(v);//維度12
             show = Encoding.Unicode.GetString(aa,0,4);

     

     

    2007年9月12日 上午 07:43
  • 中文與英文,每個字都算2個位元組數

     

    1.出來的值會是"你口",第二個字會亂碼

    這個問題之前有說到,字會切一半,變亂碼.

    因為你位元組數填3,所以就會有一個字被腰斬.

    show = Encoding.Unicode.GetString(aa,0,3);

    2007年9月12日 上午 08:03
  • 如果是簡中和繁中都有做處理了

    不過資料庫的定序如果設繁中,那簡中的文字放的進去嗎?還要試試

    試了,放不下去,會說類型錯誤

    所以如果妥當一點的話,要把簡中判斷掉,可是如果使用者又亂打其它的呢

    唉...所以說呢...簡中也不用判斷了,直接接住類型就好了

    Code Snippet

                string sName = "abc你是誰";
                string getVal ="";

                int len=4,count =0;

                for (int i = 0; count < len; i++)
                {
                    string oneName = sName.Substring(i, 1);
                    if (Encoding.GetEncoding("Big5").GetBytes(oneName).Length == 2)
                    {
                        if ((count + 2) <= len)
                        {
                            getVal += oneName;
                        }
                        count = count + 2;
                    }/*把簡中判斷掉
                    else if(Encoding.GetEncoding(936).GetBytes(oneName).Length == 2)             
                    {
                        count = count + 2;
                    }*/
                    else
                    {
                        getVal += oneName;
                        ++count;
                    }
                }
            
                show = getVal;

     MessageBox.Show(show);

     

     

    大大有沒有什麼想法呢

    2007年9月12日 上午 08:33